2 * $Id: uams_guest.c,v 1.11 2002-10-13 06:18:14 didg Exp $
4 * (c) 2001 (see COPYING)
9 #endif /* HAVE_CONFIG_H */
19 #else /* STDC_HEADERS */
23 #endif /* HAVE_STRCHR */
24 char *strchr (), *strrchr ();
26 #define memcpy(d,s,n) bcopy ((s), (d), (n))
27 #define memmove(d,s,n) bcopy ((s), (d), (n))
28 #endif /* ! HAVE_MEMCPY */
29 #endif /* STDC_HEADERS */
32 #include <atalk/logger.h>
34 #include <atalk/afp.h>
35 #include <atalk/uam.h>
37 static int noauth_login(void *obj, struct passwd **uam_pwd,
38 char *ibuf, int ibuflen,
39 char *rbuf, int *rbuflen)
42 char *guest, *username;
45 LOG(log_info, logtype_uams, "login noauth" );
47 if (uam_afpserver_option(obj, UAM_OPTION_GUEST, (void *) &guest,
51 if (uam_afpserver_option(obj, UAM_OPTION_USERNAME,
52 (void *) &username, NULL) < 0)
55 strcpy(username, guest);
56 if ((pwent = getpwnam(guest)) == NULL) {
57 LOG(log_error, logtype_uams, "noauth_login: getpwnam( %s ): %s",
58 guest, strerror(errno) );
59 return( AFPERR_BADUAM );
64 LOG(log_error, logtype_uams, "noauth_login: setpag: %s", strerror(errno) );
65 return( AFPERR_BADUAM );
74 /* Printer NoAuthUAM Login */
75 int noauth_printer(start, stop, username, out)
76 char *start, *stop, *username;
80 static const char *loginok = "0\r";
82 data = (char *)malloc(stop - start + 1);
83 strncpy(data, start, stop - start + 1);
85 /* We are looking for the following format in data:
88 * Hopefully username doesn't contain a ")"
91 if ((p = strchr(data, '(' )) == NULL) {
92 LOG(log_info, logtype_uams,"Bad Login NoAuthUAM: username not found in string");
97 if ((q = strchr(data, ')' )) == NULL) {
98 LOG(log_info, logtype_uams,"Bad Login NoAuthUAM: username not found in string");
102 strncpy(username, p, q - p);
104 /* Done copying username, clean up */
107 if (getpwnam(username) == NULL) {
108 LOG(log_info, logtype_uams, "Bad Login NoAuthUAM: %s: %s",
109 username, strerror(errno) );
113 /* Login successful */
114 append(out, loginok, strlen(loginok));
115 LOG(log_info, logtype_uams, "Login NoAuthUAM: %s", username);
120 static int uam_setup(const char *path)
122 if (uam_register(UAM_SERVER_LOGIN, path, "No User Authent",
123 noauth_login, NULL, NULL) < 0)
125 if (uam_register(UAM_SERVER_PRINTAUTH, path, "NoAuthUAM",
132 static void uam_cleanup()
134 uam_unregister(UAM_SERVER_LOGIN, "No User Authent");
135 uam_unregister(UAM_SERVER_PRINTAUTH, "NoAuthUAM");
138 UAM_MODULE_EXPORT struct uam_export uams_guest = {
141 uam_setup, uam_cleanup