]> arthur.barton.de Git - netatalk.git/blob - etc/uams/uams_guest.c
Initial revision
[netatalk.git] / etc / uams / uams_guest.c
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <string.h>
4 #include <pwd.h>
5 #include <syslog.h>
6
7 #include <atalk/afp.h>
8 #include <atalk/uam.h>
9
10 static int noauth_login(void *obj, struct passwd **uam_pwd,
11                         char *ibuf, int ibuflen, 
12                         char *rbuf, int *rbuflen)
13 {
14     struct passwd *pwent;
15     char *guest, *username;
16
17     *rbuflen = 0;
18     syslog( LOG_INFO, "login noauth" );
19
20     if (uam_afpserver_option(obj, UAM_OPTION_GUEST, (void *) &guest,
21                              NULL) < 0)
22       return AFPERR_MISC;
23
24     if (uam_afpserver_option(obj, UAM_OPTION_USERNAME, 
25                              (void *) &username, NULL) < 0)
26       return AFPERR_MISC;
27
28     strcpy(username, guest);
29     if ((pwent = getpwnam(guest)) == NULL) {
30         syslog( LOG_ERR, "noauth_login: getpwnam( %s ): %m", guest);
31         return( AFPERR_BADUAM );
32     }
33
34 #ifdef AFS
35     if ( setpag() < 0 ) {
36         syslog( LOG_ERR, "noauth_login: setpag: %m" );
37         return( AFPERR_BADUAM );
38     }
39 #endif /* AFS */
40
41     *uam_pwd = pwent;
42     return( AFP_OK );
43 }
44
45 static int uam_setup(const char *path)
46 {
47   if (uam_register(UAM_SERVER_LOGIN, path, "No User Authent",
48                noauth_login, NULL, NULL) < 0)
49     return -1;
50   /* uam_register(UAM_SERVER_PRINTAUTH, path,
51      "No User Authent", noauth_printer); */
52
53   return 0;
54 }
55
56 static void uam_cleanup()
57 {
58   uam_unregister(UAM_SERVER_LOGIN, "No User Authent");
59   /* uam_unregister(UAM_SERVER_PRINTAUTH, "No User Authent"); */
60 }
61
62 UAM_MODULE_EXPORT struct uam_export uams_guest = {
63   UAM_MODULE_SERVER,
64   UAM_MODULE_VERSION,
65   uam_setup, uam_cleanup
66 };