- pwd->pw_uid, pwd->pw_gid );
-
-#ifdef CAPDIR
- if(addr_net && addr_node) { /* Do we have a valid Appletalk address? */
- addr_uid = pwd->pw_uid;
- strncpy(addr_name, pwd->pw_name, 32);
- sprintf(nodename, "%s/net%d.%dnode%d", CAPDIR, addr_net / 256, addr_net % 256, addr_node);
- syslog (LOG_INFO, "registering %s (uid %d) on %u.%u as %s",
- addr_name, addr_uid, addr_net, addr_node, nodename);
- fp = fopen(nodename, "w");
- fprintf(fp, "%s\n", addr_name);
- fclose(fp);
- }
-#endif /* CAPDIR */
+ pwd->pw_uid, pwd->pw_gid );
+
+ if (obj->proto == AFPPROTO_ASP) {
+ ASP asp = obj->handle;
+ int addr_net = ntohs( asp->asp_sat.sat_addr.s_net );
+ int addr_node = asp->asp_sat.sat_addr.s_node;
+
+ if (obj->options.authprintdir) {
+ if(addr_net && addr_node) { /* Do we have a valid Appletalk address? */
+ char nodename[256];
+ FILE *fp;
+ struct stat stat_buf;
+
+ sprintf(nodename, "%s/net%d.%dnode%d", obj->options.authprintdir,
+ addr_net / 256, addr_net % 256, addr_node);
+ syslog (LOG_INFO, "registering %s (uid %d) on %u.%u as %s",
+ pwd->pw_name, pwd->pw_uid, addr_net, addr_node, nodename);
+
+ if (stat(nodename, &stat_buf) == 0) { /* file exists */
+ if (S_ISREG(stat_buf.st_mode)) { /* normal file */
+ unlink(nodename);
+ fp = fopen(nodename, "w");
+ fprintf(fp, "%s\n", pwd->pw_name);
+ fclose(fp);
+ chown( nodename, pwd->pw_uid, -1 );
+ } else { /* somebody is messing with us */
+ syslog( LOG_ERR, "print authfile %s is not a normal file, it will not be modified", nodename );
+ }
+ } else { /* file 'nodename' does not exist */
+ fp = fopen(nodename, "w");
+ fprintf(fp, "%s\n", pwd->pw_name);
+ fclose(fp);
+ chown( nodename, pwd->pw_uid, -1 );
+ }
+ } /* if (addr_net && addr_node ) */
+ } /* if (options->authprintdir) */
+ } /* if (obj->proto == AFPPROTO_ASP) */