--- mysql/common.c Wed Feb 2 22:59:21 2000 +++ src-0.3-local/common.c Thu Feb 17 21:20:24 2000 @@ -17,6 +17,7 @@ #include #include #include +#include #include "mysql-admutils.h" char *program_name; @@ -115,6 +116,75 @@ return 1; /* OK */ return 0; /* not owner if we get as far as this */ +} + +/** + * Decides if the user is member of a group. The Unix group can't contain any + * '_'. i.e 'fidi_s' won't be accepted. + */ +int +member(char *gr) { + char *username; + + char *group; + struct group *g; + + struct passwd *p; + char *foo; + + /* size_t i = 0; */ + + /* Get username */ + p = getpwuid(getuid()); + if (!p) { + fprintf(stderr, "Failed to look up your UNIX username."); + exit(1); + } + username = p->pw_name; + + /* Copy string, but cut at '_' */ + group = strdup(gr); + if (group == NULL) { + fprintf(stderr, "Couldn't allocate memory. Terminating."); + exit(1); + } + + foo = strchr(group, '_'); + if (foo) { +#if DEBUG + printf("gr = %s, group = %s, foo = %s\n", gr, group, foo); +#endif + *foo = '\0'; + } + + /* Get group */ + g = getgrnam(group); + if (g == NULL) { + fprintf(stderr, "No such group: %s\n", group); + exit(1); + } + + /* Check if user is member of group */ + while(*g->gr_mem != NULL) { + char * member = *g->gr_mem; +#if DEBUG + printf("Medlem: %s\n", *g->gr_mem); +#endif + + if (strcmp(member,username) == 0) { +#if DEBUG + printf("You have access to '%s'\n", gr); +#endif + return 1; /* OK */ + } else + *g->gr_mem++; + } +#if DEBUG + printf("You have no access to '%s'\n", gr); +#endif + + return 0; + }