mysql-admutils/common.patch
Knut Petter Svendsen ff52786682 With alter table patches and the undocumented feature for administering
mysql users and databases with same name as unix groups for the user.
2002-02-27 08:49:48 +00:00

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;
+
}