beautifisering (2-space-indent), og tetting av minnehull
This commit is contained in:
parent
2e1453ceba
commit
5a1f013a31
110
common.c
110
common.c
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* @(#) $Header: /tmp/cvs/mysql-admutils/common.c,v 1.7 2006-08-15 10:32:42 geirha Exp $
|
||||
* @(#) $Header: /tmp/cvs/mysql-admutils/common.c,v 1.8 2006-08-15 11:51:58 geirha Exp $
|
||||
*
|
||||
* functions used by mysql-dbadm.c and mysql-useradm.c
|
||||
*
|
||||
|
@ -22,7 +22,7 @@
|
|||
|
||||
char *program_name;
|
||||
|
||||
static char *rcsheader = "@(#) " PACKAGE " " VERSION " orakel@ntnu.no $Header: /tmp/cvs/mysql-admutils/common.c,v 1.7 2006-08-15 10:32:42 geirha Exp $";
|
||||
static char *rcsheader = "@(#) " PACKAGE " " VERSION " orakel@ntnu.no $Header: /tmp/cvs/mysql-admutils/common.c,v 1.8 2006-08-15 11:51:58 geirha Exp $";
|
||||
|
||||
|
||||
int
|
||||
|
@ -38,14 +38,13 @@ wrong_use(char *format, ...)
|
|||
{
|
||||
va_list ap;
|
||||
|
||||
if (format)
|
||||
{
|
||||
fprintf(stderr, "%s: ", program_name);
|
||||
va_start(ap, format);
|
||||
vfprintf(stderr, format, ap);
|
||||
va_end(ap);
|
||||
putchar('\n');
|
||||
}
|
||||
if (format) {
|
||||
fprintf(stderr, "%s: ", program_name);
|
||||
va_start(ap, format);
|
||||
vfprintf(stderr, format, ap);
|
||||
va_end(ap);
|
||||
putchar('\n');
|
||||
}
|
||||
|
||||
fprintf(stderr, "Try `%s --help' for more information.\n", program_name);
|
||||
|
||||
|
@ -66,14 +65,13 @@ dberror(MYSQL *pmysql, char *format, ...)
|
|||
va_end(ap);
|
||||
fprintf(stderr, "\n");
|
||||
|
||||
if (pmysql)
|
||||
{
|
||||
errmsg = mysql_error(pmysql);
|
||||
if ((errmsg) && (strcmp(errmsg, "") != 0))
|
||||
fprintf(stderr, "mysql: %s\n", errmsg);
|
||||
if (pmysql) {
|
||||
errmsg = mysql_error(pmysql);
|
||||
if ((errmsg) && (strcmp(errmsg, "") != 0))
|
||||
fprintf(stderr, "mysql: %s\n", errmsg);
|
||||
|
||||
mysql_close(pmysql);
|
||||
}
|
||||
mysql_close(pmysql);
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
@ -102,11 +100,10 @@ owner(char *name)
|
|||
struct passwd *p;
|
||||
|
||||
p = getpwuid(getuid());
|
||||
if (!p)
|
||||
{
|
||||
dberror(NULL, "Failed to look up your UNIX username.");
|
||||
exit(1);
|
||||
}
|
||||
if (!p) {
|
||||
dberror(NULL, "Failed to look up your UNIX username.");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
if (strcmp(name, p->pw_name) == 0)
|
||||
return 1; /* OK */
|
||||
|
@ -182,8 +179,9 @@ member(char *gr) {
|
|||
printf("You have access to '%s'\n", gr);
|
||||
#endif
|
||||
return 1; /* OK */
|
||||
} else
|
||||
} else {
|
||||
*g->gr_mem++;
|
||||
}
|
||||
}
|
||||
#if DEBUG
|
||||
printf("You have no access to '%s'\n", gr);
|
||||
|
@ -192,15 +190,15 @@ member(char *gr) {
|
|||
// brukeren var ikke med i gruppen, så vi må prøve neste.
|
||||
|
||||
// finner den siste _-en i navnet.
|
||||
foo = strrchr(group, '_');
|
||||
if (foo == NULL) {
|
||||
foo = strrchr(group, '_');
|
||||
if (foo == NULL) {
|
||||
// hvis vi har kommet helt til bunn, og fremdeles
|
||||
// ikke har blitt avbrutt, fantes det ingen slik gruppe.
|
||||
return 0;
|
||||
}
|
||||
// det som nå er bak siste underscore er passe uinteressant, så
|
||||
// vi flytter slutten av strengen litt framover.
|
||||
*foo = '\0';
|
||||
return 0;
|
||||
}
|
||||
// det som nå er bak siste underscore er passe uinteressant, så
|
||||
// vi flytter slutten av strengen litt framover.
|
||||
*foo = '\0';
|
||||
|
||||
} // while
|
||||
}
|
||||
|
@ -209,40 +207,40 @@ member(char *gr) {
|
|||
/* numgroups is the total number of groups found */
|
||||
char **get_group_names(int *numgroups)
|
||||
{
|
||||
char **grouplist;
|
||||
gid_t gids[33];
|
||||
int real_nr_groups, nr_groups, i;
|
||||
struct group *g;
|
||||
char **grouplist;
|
||||
gid_t gids[33];
|
||||
int real_nr_groups, nr_groups, i;
|
||||
struct group *g;
|
||||
|
||||
nr_groups = 0;
|
||||
nr_groups = 0;
|
||||
|
||||
nr_groups = getgroups(32, &gids[0]); /* Allow a max of 32 groups */
|
||||
nr_groups = getgroups(32, &gids[0]); /* Allow a max of 32 groups */
|
||||
|
||||
if (nr_groups == -1) {
|
||||
dberror(NULL, "Error while trying to fetch group info");
|
||||
return NULL;
|
||||
}
|
||||
if (nr_groups == -1) {
|
||||
dberror(NULL, "Error while trying to fetch group info");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
grouplist = malloc(sizeof(char *));
|
||||
real_nr_groups = 0;
|
||||
grouplist = malloc(sizeof(char *));
|
||||
real_nr_groups = 0;
|
||||
|
||||
for (i = 0; i < nr_groups; i++) {
|
||||
g = getgrgid(gids[i]);
|
||||
for (i = 0; i < nr_groups; i++) {
|
||||
g = getgrgid(gids[i]);
|
||||
|
||||
/* Go to next grp if it doesn't have a name */
|
||||
if (g != NULL) {
|
||||
grouplist = (char **) realloc(grouplist, (real_nr_groups+2) * sizeof(char *));
|
||||
grouplist[real_nr_groups] = strdup(g->gr_name);
|
||||
real_nr_groups++;
|
||||
} else {
|
||||
fprintf(stderr, "Omitting gid %d, no entry in group-file.\n", gids[i]);
|
||||
}
|
||||
}
|
||||
grouplist[real_nr_groups] = NULL;
|
||||
/* Go to next grp if it doesn't have a name */
|
||||
if (g != NULL) {
|
||||
grouplist = (char **) realloc(grouplist, (real_nr_groups+2) * sizeof(char *));
|
||||
grouplist[real_nr_groups] = strdup(g->gr_name);
|
||||
real_nr_groups++;
|
||||
} else {
|
||||
fprintf(stderr, "Omitting gid %d, no entry in group-file.\n", gids[i]);
|
||||
}
|
||||
}
|
||||
grouplist[real_nr_groups] = NULL;
|
||||
|
||||
*numgroups = real_nr_groups;
|
||||
*numgroups = real_nr_groups;
|
||||
|
||||
return grouplist;
|
||||
return grouplist;
|
||||
}
|
||||
|
||||
|
||||
|
|
328
mysql-dbadm.c
328
mysql-dbadm.c
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* @(#) $Header: /tmp/cvs/mysql-admutils/mysql-dbadm.c,v 1.15 2006-08-15 10:32:42 geirha Exp $
|
||||
* @(#) $Header: /tmp/cvs/mysql-admutils/mysql-dbadm.c,v 1.16 2006-08-15 11:51:59 geirha Exp $
|
||||
*
|
||||
* mysql-dbadm.c
|
||||
*
|
||||
|
@ -20,14 +20,14 @@
|
|||
|
||||
/* New database names may only use these characters in their identifier */
|
||||
const char dbname_validchars[] =
|
||||
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_-";
|
||||
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_-";
|
||||
|
||||
/* Returns true if dbname contains only characters in dbname_validchars. */
|
||||
int dbname_isclean(char* dbname) {
|
||||
int reallen, cleanlen;
|
||||
reallen = strlen(dbname);
|
||||
cleanlen = strspn(dbname, dbname_validchars);
|
||||
return (reallen == cleanlen);
|
||||
int reallen, cleanlen;
|
||||
reallen = strlen(dbname);
|
||||
cleanlen = strspn(dbname, dbname_validchars);
|
||||
return (reallen == cleanlen);
|
||||
}
|
||||
|
||||
char *
|
||||
|
@ -55,10 +55,8 @@ strtok_whitespace(char *s)
|
|||
cp = strchr_whitespace(r);
|
||||
if (cp == NULL)
|
||||
return r;
|
||||
while ((*cp == ' ') || (*cp == '\t'))
|
||||
{
|
||||
*cp++ = '\0';
|
||||
}
|
||||
while ((*cp == ' ') || (*cp == '\t'))
|
||||
*cp++ = '\0';
|
||||
return r;
|
||||
}
|
||||
|
||||
|
@ -105,14 +103,14 @@ create(MYSQL *pmysql, char *db)
|
|||
// går jo dette vanligvis bra.
|
||||
// finner ut om denne finnes fra før.
|
||||
if (!mysql_select_db(pmysql, db)) {
|
||||
return dberror(pmysql, "Database '%s' already exists.", db);
|
||||
return dberror(pmysql, "Database '%s' already exists.", db);
|
||||
}
|
||||
mysql_select_db(pmysql, "mysql");
|
||||
// oppretter databasen.
|
||||
char query[1024];
|
||||
sprintf(query, "create database `%s`", db);
|
||||
if (mysql_query(pmysql, query))
|
||||
return dberror(pmysql, "Cannot create database '%s'.", db);
|
||||
return dberror(pmysql, "Cannot create database '%s'.", db);
|
||||
fprintf(stderr, "Database '%s' created.\n", db);
|
||||
return 0;
|
||||
}
|
||||
|
@ -128,8 +126,8 @@ drop(MYSQL *pmysql, char *db)
|
|||
dberror(pmysql, "Failed to delete permissions for database '%s'.", db);
|
||||
|
||||
if (mysql_select_db(pmysql, db)) {
|
||||
dberror(pmysql, "Database '%s' doesn't exists.", db);
|
||||
return 0;
|
||||
dberror(pmysql, "Database '%s' doesn't exists.", db);
|
||||
return 0;
|
||||
}
|
||||
mysql_select_db(pmysql, "mysql");
|
||||
|
||||
|
@ -154,16 +152,15 @@ list(MYSQL *pmysql)
|
|||
int i, counter;
|
||||
struct passwd *p;
|
||||
|
||||
// variabler som brukes til å escape gruppenavnet til mysqlvennlig format.
|
||||
// variabler som brukes til å escape gruppenavnet til mysqlvennlig format.
|
||||
char escaped_user[64];
|
||||
char *cp_kopi;
|
||||
|
||||
p = getpwuid(getuid());
|
||||
if (!p)
|
||||
{
|
||||
dberror(NULL, "Failed to lookup your UNIX username.");
|
||||
exit(1);
|
||||
}
|
||||
if (!p) {
|
||||
dberror(NULL, "Failed to lookup your UNIX username.");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
dblist = malloc(2 * sizeof(char*)); /* one for username (if used), rest is done below */
|
||||
|
||||
|
@ -174,7 +171,7 @@ list(MYSQL *pmysql)
|
|||
cp = usr_groups;
|
||||
while (*cp) { // itererer over alle grupper en person er med i
|
||||
if (*cp == NULL)
|
||||
break;
|
||||
break;
|
||||
|
||||
#ifdef DEBUG
|
||||
printf("cp er %s\n", *cp);
|
||||
|
@ -185,13 +182,13 @@ list(MYSQL *pmysql)
|
|||
|
||||
// itererer over bokstavene i gruppenavn, og escaper spesialtegn.
|
||||
for(i=0; i<=strlen(cp_kopi); i++) {
|
||||
// hvis % _ , så skriv \ og så tegn
|
||||
if ((cp_kopi[i] == '_') || (cp_kopi[i] == '%')) {
|
||||
strcat(escaped_user, "\\");
|
||||
}
|
||||
// hvis % _ , så skriv \ og så tegn
|
||||
if ((cp_kopi[i] == '_') || (cp_kopi[i] == '%')) {
|
||||
strcat(escaped_user, "\\");
|
||||
}
|
||||
|
||||
escaped_user[strlen(escaped_user) + 1] = '\0';
|
||||
escaped_user[strlen(escaped_user)] = cp_kopi[i];
|
||||
escaped_user[strlen(escaped_user) + 1] = '\0';
|
||||
escaped_user[strlen(escaped_user)] = cp_kopi[i];
|
||||
} // for
|
||||
|
||||
wild = malloc(strlen(escaped_user)+4);
|
||||
|
@ -209,47 +206,51 @@ list(MYSQL *pmysql)
|
|||
|
||||
dblist = realloc(dblist, (numgroupdbs+2) * sizeof(char *));
|
||||
|
||||
for (i = 0; i < rows; i++)
|
||||
if ((row = mysql_fetch_row(res))) {
|
||||
dblist[counter++] = strdup(row[0]);
|
||||
}
|
||||
for (i = 0; i < rows; i++) {
|
||||
if ((row = mysql_fetch_row(res))) {
|
||||
dblist[counter++] = strdup(row[0]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
free(wild);
|
||||
free(res);
|
||||
free(cp_kopi);
|
||||
cp++;
|
||||
}
|
||||
|
||||
wild = malloc(strlen(p->pw_name) + 4);
|
||||
sprintf(wild, "%s\\_%%", p->pw_name);
|
||||
#ifdef DEBUG
|
||||
printf("dbadm: wildcard: '%s'\n", wild);
|
||||
printf("dbadm: wildcard: '%s'\n", wild);
|
||||
#endif
|
||||
|
||||
res = mysql_list_dbs(pmysql, wild);
|
||||
rows = mysql_num_rows(res);
|
||||
dblist = realloc(dblist, (numgroupdbs+rows+2) * sizeof(char *));
|
||||
|
||||
if (!dblist)
|
||||
{
|
||||
dberror(NULL, "Out of memory.\n");
|
||||
free(wild);
|
||||
return NULL;
|
||||
}
|
||||
if (!dblist) {
|
||||
dberror(NULL, "Out of memory.\n");
|
||||
free(wild);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
for (i = 0; i < rows; i++)
|
||||
if ((row = mysql_fetch_row(res)))
|
||||
{
|
||||
dblist[counter++] = strdup(row[0]);
|
||||
}
|
||||
for (i = 0; i < rows; i++) {
|
||||
if ((row = mysql_fetch_row(res))) {
|
||||
dblist[counter++] = strdup(row[0]);
|
||||
}
|
||||
}
|
||||
|
||||
res = mysql_list_dbs(pmysql, p->pw_name);
|
||||
rows = mysql_num_rows(res);
|
||||
if (rows == 1)
|
||||
dblist[counter++] = strdup(p->pw_name);
|
||||
dblist[counter++] = strdup(p->pw_name);
|
||||
|
||||
dblist[counter] = NULL;
|
||||
|
||||
|
||||
free(wild);
|
||||
free(usr_groups);
|
||||
return dblist;
|
||||
}
|
||||
|
||||
|
@ -263,26 +264,27 @@ writeperm(FILE *f, MYSQL *pmysql, const char *db)
|
|||
MYSQL_ROW row;
|
||||
|
||||
sprintf(query, "select user,select_priv,insert_priv,update_priv,"
|
||||
"delete_priv,create_priv,drop_priv,alter_priv,index_priv from db where db='%s'", db);
|
||||
"delete_priv,create_priv,drop_priv,alter_priv,index_priv from db where db='%s'", db);
|
||||
|
||||
if (mysql_query(pmysql, query))
|
||||
return dberror(pmysql, "Query for permissions failed.");
|
||||
res = mysql_store_result(pmysql);
|
||||
rows = mysql_num_rows(res);
|
||||
fprintf(f, "# User "
|
||||
"Select Insert Update Delete Create Drop Alter Index\n");
|
||||
"Select Insert Update Delete Create Drop Alter Index\n");
|
||||
fprintf(f, "# ---------------- "
|
||||
"------ ------ ------ ------ ------ ---- ----- -----\n");
|
||||
"------ ------ ------ ------ ------ ---- ----- -----\n");
|
||||
|
||||
if (rows == 0)
|
||||
fprintf(f, "# (no permissions currently granted to any users)\n");
|
||||
else
|
||||
for (i = 0; i < rows; i++)
|
||||
{
|
||||
row = mysql_fetch_row(res);
|
||||
fprintf(f, " %-16s %-7s %-7s %-7s %-7s %-7s %-7s %-7s %s\n",
|
||||
row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8]);
|
||||
}
|
||||
fprintf(f, "# (no permissions currently granted to any users)\n");
|
||||
else {
|
||||
for (i = 0; i < rows; i++) {
|
||||
row = mysql_fetch_row(res);
|
||||
fprintf(f, " %-16s %-7s %-7s %-7s %-7s %-7s %-7s %-7s %s\n",
|
||||
row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8]);
|
||||
}
|
||||
}
|
||||
free(res);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -334,76 +336,74 @@ editperm(MYSQL *pmysql, const char *db)
|
|||
strcpy(cmd, editor);
|
||||
strcat(cmd, " ");
|
||||
strcat(cmd, fn);
|
||||
if (system(cmd) == -1)
|
||||
{
|
||||
dberror(NULL, "Failed to execute '%s'\n", cmd);
|
||||
perror("system");
|
||||
return 1;
|
||||
}
|
||||
if (system(cmd) == -1) {
|
||||
dberror(NULL, "Failed to execute '%s'\n", cmd);
|
||||
perror("system");
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* parse */
|
||||
f = fopen(fn, "r");
|
||||
lines = 0;
|
||||
while (fgets(line, sizeof(line), f))
|
||||
{
|
||||
cp = strchr(line, '\n');
|
||||
if (cp)
|
||||
*cp = '\0';
|
||||
while (fgets(line, sizeof(line), f)) {
|
||||
cp = strchr(line, '\n');
|
||||
if (cp)
|
||||
*cp = '\0';
|
||||
|
||||
cp = line;
|
||||
while (*cp && ((*cp == ' ') || (*cp == '\t'))) cp++;
|
||||
if (*cp == '\0') continue;
|
||||
if (*cp == '#') continue;
|
||||
if (*cp == '\n') continue;
|
||||
cp = line;
|
||||
while (*cp && ((*cp == ' ') || (*cp == '\t'))) cp++;
|
||||
if (*cp == '\0') continue;
|
||||
if (*cp == '#') continue;
|
||||
if (*cp == '\n') continue;
|
||||
|
||||
#define STRTOK_WHITESPACE(res, start) \
|
||||
{ if (!(res = strtok_whitespace(start))) continue; }
|
||||
#define STRTOK_WHITESPACE(res, start) \
|
||||
{ if (!(res = strtok_whitespace(start))) continue; }
|
||||
|
||||
STRTOK_WHITESPACE(user, cp);
|
||||
if (strlen(user) < 1)
|
||||
return dberror(NULL, "Invalid user '%s' in grant line %d.", user,
|
||||
lines + 1);
|
||||
if (strcmp(user, "%") == 0)
|
||||
*user = '\0'; /* ugly, but it works... */
|
||||
STRTOK_WHITESPACE(user, cp);
|
||||
if (strlen(user) < 1)
|
||||
return dberror(NULL, "Invalid user '%s' in grant line %d.", user,
|
||||
lines + 1);
|
||||
if (strcmp(user, "%") == 0)
|
||||
*user = '\0'; /* ugly, but it works... */
|
||||
|
||||
#define CHECK_PRIV(PRIV) \
|
||||
if (!valid_priv(PRIV)) return dberror(NULL, "Invalid value '%s' " \
|
||||
"in grant line %d.", PRIV, lines + 1)
|
||||
|
||||
STRTOK_WHITESPACE(select_priv, NULL);
|
||||
CHECK_PRIV(select_priv);
|
||||
STRTOK_WHITESPACE(insert_priv, NULL);
|
||||
CHECK_PRIV(insert_priv);
|
||||
STRTOK_WHITESPACE(update_priv, NULL);
|
||||
CHECK_PRIV(update_priv);
|
||||
STRTOK_WHITESPACE(delete_priv, NULL);
|
||||
CHECK_PRIV(delete_priv);
|
||||
STRTOK_WHITESPACE(create_priv, NULL);
|
||||
CHECK_PRIV(create_priv);
|
||||
STRTOK_WHITESPACE(drop_priv, NULL);
|
||||
CHECK_PRIV(drop_priv);
|
||||
STRTOK_WHITESPACE(alter_priv, NULL);
|
||||
CHECK_PRIV(alter_priv);
|
||||
STRTOK_WHITESPACE(index_priv, NULL);
|
||||
CHECK_PRIV(index_priv);
|
||||
STRTOK_WHITESPACE(select_priv, NULL);
|
||||
CHECK_PRIV(select_priv);
|
||||
STRTOK_WHITESPACE(insert_priv, NULL);
|
||||
CHECK_PRIV(insert_priv);
|
||||
STRTOK_WHITESPACE(update_priv, NULL);
|
||||
CHECK_PRIV(update_priv);
|
||||
STRTOK_WHITESPACE(delete_priv, NULL);
|
||||
CHECK_PRIV(delete_priv);
|
||||
STRTOK_WHITESPACE(create_priv, NULL);
|
||||
CHECK_PRIV(create_priv);
|
||||
STRTOK_WHITESPACE(drop_priv, NULL);
|
||||
CHECK_PRIV(drop_priv);
|
||||
STRTOK_WHITESPACE(alter_priv, NULL);
|
||||
CHECK_PRIV(alter_priv);
|
||||
STRTOK_WHITESPACE(index_priv, NULL);
|
||||
CHECK_PRIV(index_priv);
|
||||
|
||||
#undef STRTOK_WHITESPACE
|
||||
#undef CHECK_PRIV
|
||||
|
||||
sprintf(query, "insert into db (host, db, user, select_priv, insert_priv, "
|
||||
"update_priv, delete_priv, create_priv, drop_priv, alter_priv, index_priv) values "
|
||||
"('%%', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s')",
|
||||
db, user, select_priv, insert_priv, update_priv, delete_priv,
|
||||
create_priv, drop_priv, alter_priv, index_priv);
|
||||
queries[lines] = strdup(query);
|
||||
lines++;
|
||||
if (lines >= MAX_GRANTS)
|
||||
{
|
||||
dberror(NULL, "Warning: Maximum of %d grants reached.\n",
|
||||
MAX_GRANTS);
|
||||
continue;
|
||||
}
|
||||
} /* while fgets ... */
|
||||
sprintf(query, "insert into db (host, db, user, select_priv, insert_priv, "
|
||||
"update_priv, delete_priv, create_priv, drop_priv, alter_priv, index_priv) values "
|
||||
"('%%', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s')",
|
||||
db, user, select_priv, insert_priv, update_priv, delete_priv,
|
||||
create_priv, drop_priv, alter_priv, index_priv);
|
||||
queries[lines] = strdup(query);
|
||||
lines++;
|
||||
if (lines >= MAX_GRANTS)
|
||||
{
|
||||
dberror(NULL, "Warning: Maximum of %d grants reached.\n",
|
||||
MAX_GRANTS);
|
||||
continue;
|
||||
}
|
||||
} /* while fgets ... */
|
||||
|
||||
unlink(fn);
|
||||
fclose(f);
|
||||
|
@ -416,14 +416,14 @@ editperm(MYSQL *pmysql, const char *db)
|
|||
dberror(pmysql, "Failed to delete old grants for '%s'.", db);
|
||||
|
||||
for (i = 0; i < lines; i++)
|
||||
{
|
||||
#ifdef DEBUG
|
||||
puts(queries[i]);
|
||||
putchar('\n');
|
||||
#endif
|
||||
if (mysql_query(pmysql, queries[i]))
|
||||
dberror(pmysql, "Failed to insert grant line %d.", i + 1);
|
||||
}
|
||||
{
|
||||
#ifdef DEBUG
|
||||
puts(queries[i]);
|
||||
putchar('\n');
|
||||
#endif
|
||||
if (mysql_query(pmysql, queries[i]))
|
||||
dberror(pmysql, "Failed to insert grant line %d.", i + 1);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -480,60 +480,60 @@ main(int argc, char *argv[])
|
|||
/* connect to the database server and select the mysql database */
|
||||
if (!mysql_real_connect(&mysql, db_server, db_user, db_passwd, db_name, 0, NULL, 0))
|
||||
return dberror(&mysql, "Cannot connect to database server '%s'.",
|
||||
db_server);
|
||||
db_server);
|
||||
if (mysql_select_db(&mysql, db_name))
|
||||
return dberror(&mysql, "Cannot select database '%s'.", db_name);
|
||||
|
||||
if ((command == c_show) && (argc == 2))
|
||||
{
|
||||
dblist = list(&mysql);
|
||||
p = dblist;
|
||||
while (*p)
|
||||
{
|
||||
show(&mysql, *p);
|
||||
free(*p);
|
||||
p++;
|
||||
}
|
||||
free(dblist);
|
||||
if ((command == c_show) && (argc == 2)) {
|
||||
dblist = list(&mysql);
|
||||
p = dblist;
|
||||
while (*p) {
|
||||
show(&mysql, *p);
|
||||
free(*p);
|
||||
p++;
|
||||
}
|
||||
free(*p);
|
||||
free(dblist);
|
||||
}
|
||||
else {
|
||||
db = malloc(64);
|
||||
/* for each supplied database name, perform the requested action */
|
||||
for (i = 2; i < argc; i++) {
|
||||
// HE HE
|
||||
strncpy(db, argv[i], 32);
|
||||
db[33] = '\0';
|
||||
db = malloc(64);
|
||||
/* for each supplied database name, perform the requested action */
|
||||
for (i = 2; i < argc; i++) {
|
||||
// HE HE
|
||||
strncpy(db, argv[i], 32);
|
||||
db[32] = '\0';
|
||||
|
||||
if (! (owner(db) || member(db))) {
|
||||
dberror(NULL, "You are not the owner of '%s'. Skipping.",
|
||||
if (! (owner(db) || member(db))) {
|
||||
dberror(NULL, "You are not the owner of '%s'. Skipping.",
|
||||
db);
|
||||
continue;
|
||||
}
|
||||
continue;
|
||||
}
|
||||
|
||||
switch (command) {
|
||||
case c_create:
|
||||
// We only check newly created databases. Many old ("unclean") databases are still in use.
|
||||
if(dbname_isclean(db)) {
|
||||
create(&mysql, db);
|
||||
} else {
|
||||
dberror(NULL, "Database name '%s' contains invalid characters.\n"
|
||||
"Only A-Z, a-z, 0-9, _ (underscore) and - (dash) permitted. Skipping.", db);
|
||||
}
|
||||
break;
|
||||
case c_drop:
|
||||
drop(&mysql, db);
|
||||
break;
|
||||
case c_editperm:
|
||||
editperm(&mysql, db);
|
||||
break;
|
||||
case c_show:
|
||||
show(&mysql, db);
|
||||
break;
|
||||
default:
|
||||
return dberror(NULL, "This point should never be reached!");
|
||||
}
|
||||
} // for
|
||||
} // else
|
||||
switch (command) {
|
||||
case c_create:
|
||||
// We only check newly created databases. Many old ("unclean") databases are still in use.
|
||||
if(dbname_isclean(db)) {
|
||||
create(&mysql, db);
|
||||
} else {
|
||||
dberror(NULL, "Database name '%s' contains invalid characters.\n"
|
||||
"Only A-Z, a-z, 0-9, _ (underscore) and - (dash) permitted. Skipping.", db);
|
||||
}
|
||||
break;
|
||||
case c_drop:
|
||||
drop(&mysql, db);
|
||||
break;
|
||||
case c_editperm:
|
||||
editperm(&mysql, db);
|
||||
break;
|
||||
case c_show:
|
||||
show(&mysql, db);
|
||||
break;
|
||||
default:
|
||||
return dberror(NULL, "This point should never be reached!");
|
||||
}
|
||||
} // for
|
||||
free(db);
|
||||
} // else
|
||||
|
||||
mysql_reload(&mysql);
|
||||
mysql_close(&mysql);
|
||||
|
|
Loading…
Reference in New Issue