2 * $Id: uams_guest.c,v 1.8 2001-10-24 14:34:33 srittau Exp $
4 * (c) 2001 (see COPYING)
9 #endif /* HAVE_CONFIG_H */
18 #else /* STDC_HEADERS */
22 #endif /* HAVE_STRCHR */
23 char *strchr (), *strrchr ();
25 #define memcpy(d,s,n) bcopy ((s), (d), (n))
26 #define memmove(d,s,n) bcopy ((s), (d), (n))
27 #endif /* ! HAVE_MEMCPY */
28 #endif /* STDC_HEADERS */
33 #include <atalk/afp.h>
34 #include <atalk/uam.h>
36 static int noauth_login(void *obj, struct passwd **uam_pwd,
37 char *ibuf, int ibuflen,
38 char *rbuf, int *rbuflen)
41 char *guest, *username;
44 syslog( LOG_INFO, "login noauth" );
46 if (uam_afpserver_option(obj, UAM_OPTION_GUEST, (void *) &guest,
50 if (uam_afpserver_option(obj, UAM_OPTION_USERNAME,
51 (void *) &username, NULL) < 0)
54 strcpy(username, guest);
55 if ((pwent = getpwnam(guest)) == NULL) {
56 syslog( LOG_ERR, "noauth_login: getpwnam( %s ): %s",
57 guest, strerror(errno) );
58 return( AFPERR_BADUAM );
63 syslog( LOG_ERR, "noauth_login: setpag: %s", strerror(errno) );
64 return( AFPERR_BADUAM );
73 /* Printer NoAuthUAM Login */
74 int noauth_printer(start, stop, username, out)
75 char *start, *stop, *username;
79 static const char *loginok = "0\r";
81 data = (char *)malloc(stop - start + 1);
82 strncpy(data, start, stop - start + 1);
84 /* We are looking for the following format in data:
87 * Hopefully username doesn't contain a ")"
90 if ((p = strchr(data, '(' )) == NULL) {
91 syslog(LOG_INFO,"Bad Login NoAuthUAM: username not found in string");
96 if ((q = strchr(data, ')' )) == NULL) {
97 syslog(LOG_INFO,"Bad Login NoAuthUAM: username not found in string");
101 strncpy(username, p, q - p);
103 /* Done copying username, clean up */
106 if (getpwnam(username) == NULL) {
107 syslog(LOG_INFO, "Bad Login NoAuthUAM: %s: %s",
108 username, strerror(errno) );
112 /* Login successful */
113 append(out, loginok, strlen(loginok));
114 syslog(LOG_INFO, "Login NoAuthUAM: %s", username);
119 static int uam_setup(const char *path)
121 if (uam_register(UAM_SERVER_LOGIN, path, "No User Authent",
122 noauth_login, NULL, NULL) < 0)
124 if (uam_register(UAM_SERVER_PRINTAUTH, path, "NoAuthUAM",
131 static void uam_cleanup()
133 uam_unregister(UAM_SERVER_LOGIN, "No User Authent");
134 uam_unregister(UAM_SERVER_PRINTAUTH, "NoAuthUAM");
137 UAM_MODULE_EXPORT struct uam_export uams_guest = {
140 uam_setup, uam_cleanup