diff -urN globus_2_4_3_adv2003_fix892_fix956/gridftp/gsi-wuftpd/source/src/access.c globus_2_4_3_adv2003_fix892_fix956_more/gridftp/gsi-wuftpd/source/src/access.c --- globus_2_4_3_adv2003_fix892_fix956/gridftp/gsi-wuftpd/source/src/access.c Mon Jul 10 21:33:49 2000 +++ globus_2_4_3_adv2003_fix892_fix956_more/gridftp/gsi-wuftpd/source/src/access.c Sun Jan 4 00:08:45 2004 @@ -604,6 +604,42 @@ } } } +/*MM*/ + +void acl_magicgroup(struct passwd *pw) +{ + char class[1024]; + + struct aclmember *entry = NULL; + struct group *grp; + int which; + umask(0777); + (void) acl_getclass(class); + + /* magicgroup [...]*/ + while (getaclentry("magicgroup", &entry)) { + if (!ARG0 || !ARG1 ) + continue; + for (which = 1; (which < MAXARGS) && ARG[which]; which++) { + if (!strcasecmp(ARG[which], class)) { + + /* apply group to each class*/ + if (ARG0[0] == '%') + pw->pw_gid = atoi(ARG0 + 1); + else { + if ((grp = getgrnam(ARG0))) + pw->pw_gid = grp->gr_gid; + else + syslog(LOG_ERR, "magicgroup: set group %s not found", ARG0); + endgrent(); + } + return; + } + } + } +} + +/*MM*/ /*************************************************************************/ /* FUNCTION : acl_setfunctions */ diff -urN globus_2_4_3_adv2003_fix892_fix956/gridftp/gsi-wuftpd/source/src/ftpd.c globus_2_4_3_adv2003_fix892_fix956_more/gridftp/gsi-wuftpd/source/src/ftpd.c --- globus_2_4_3_adv2003_fix892_fix956/gridftp/gsi-wuftpd/source/src/ftpd.c Wed Dec 31 00:17:04 2003 +++ globus_2_4_3_adv2003_fix892_fix956_more/gridftp/gsi-wuftpd/source/src/ftpd.c Sun Jan 4 00:08:45 2004 @@ -3128,6 +3128,10 @@ guest = 0; anonymous = !guest; } + if (use_accessfile) { + (void) acl_magicgroup(pw); + } + /* END AUTHENTICATION */ login_attempts = 0; /* this time successful */ /* SET GROUP ID STARTS HERE */ diff -urN globus_2_4_3_adv2003_fix892_fix956/gridftp/gsi-wuftpd/source/src/proto.h globus_2_4_3_adv2003_fix892_fix956_more/gridftp/gsi-wuftpd/source/src/proto.h --- globus_2_4_3_adv2003_fix892_fix956/gridftp/gsi-wuftpd/source/src/proto.h Thu Sep 19 19:48:09 2002 +++ globus_2_4_3_adv2003_fix892_fix956_more/gridftp/gsi-wuftpd/source/src/proto.h Sun Jan 4 00:08:45 2004 @@ -64,6 +64,7 @@ int acl_guestgroup(struct passwd *); int acl_realgroup(struct passwd *); void acl_autogroup(struct passwd *); +void acl_magicgroup(struct passwd *); void acl_setfunctions(void); int acl_getclass(char *); int acl_getlimit(char *, char *);