Knut Petter Svendsen
ff52786682
mysql users and databases with same name as unix groups for the user.
87 lines
1.7 KiB
Diff
87 lines
1.7 KiB
Diff
--- 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 <unistd.h>
|
|
#include <ctype.h>
|
|
#include <string.h>
|
|
+#include <grp.h>
|
|
#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;
|
|
+
|
|
}
|
|
|
|
|