index_priv funker i dbadm nuh

This commit is contained in:
Thomas Langas 2002-03-06 02:28:27 +00:00
parent ff52786682
commit e7f3657646
2 changed files with 138 additions and 67 deletions

View File

@ -1,5 +1,5 @@
/* /*
* @(#) $Header: /tmp/cvs/mysql-admutils/mysql-dbadm.c,v 1.2 2002-02-27 08:49:48 knutpett Exp $ * @(#) $Header: /tmp/cvs/mysql-admutils/mysql-dbadm.c,v 1.3 2002-03-06 02:28:27 tlan Exp $
* *
* mysql-dbadm.c * mysql-dbadm.c
* *
@ -168,24 +168,24 @@ writeperm(FILE *f, MYSQL *pmysql, const char *db)
MYSQL_ROW row; MYSQL_ROW row;
sprintf(query, "select user,select_priv,insert_priv,update_priv," sprintf(query, "select user,select_priv,insert_priv,update_priv,"
"delete_priv,create_priv,drop_priv,alter_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)) if (mysql_query(pmysql, query))
return dberror(pmysql, "Query for permissions failed."); return dberror(pmysql, "Query for permissions failed.");
res = mysql_store_result(pmysql); res = mysql_store_result(pmysql);
rows = mysql_num_rows(res); rows = mysql_num_rows(res);
fprintf(f, "# User " fprintf(f, "# User "
"Select Insert Update Delete Create Drop Alter\n"); "Select Insert Update Delete Create Drop Alter Index\n");
fprintf(f, "# ---------------- " fprintf(f, "# ---------------- "
"------ ------ ------ ------ ------ ---- -----\n"); "------ ------ ------ ------ ------ ---- ----- -----\n");
if (rows == 0) if (rows == 0)
fprintf(f, "# (no permissions currently granted to any users)\n"); fprintf(f, "# (no permissions currently granted to any users)\n");
else else
for (i = 0; i < rows; i++) for (i = 0; i < rows; i++)
{ {
row = mysql_fetch_row(res); row = mysql_fetch_row(res);
fprintf(f, " %-16s %-7s %-7s %-7s %-7s %-7s %-7s %s\n", 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[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8]);
} }
return 0; return 0;
} }
@ -215,7 +215,7 @@ editperm(MYSQL *pmysql, const char *db)
char line[1024]; /* buffer to hold one line */ char line[1024]; /* buffer to hold one line */
char *cp; /* used to interate through a line */ char *cp; /* used to interate through a line */
char *user, *select_priv, *insert_priv, *update_priv, *delete_priv, char *user, *select_priv, *insert_priv, *update_priv, *delete_priv,
*create_priv, *drop_priv, *alter_priv; *create_priv, *drop_priv, *alter_priv, *index_priv;
char query[1024]; /* used to build a query */ char query[1024]; /* used to build a query */
char *queries[MAX_GRANTS]; /* insert queries */ char *queries[MAX_GRANTS]; /* insert queries */
int lines; /* number of grant lines processed */ int lines; /* number of grant lines processed */
@ -287,15 +287,17 @@ editperm(MYSQL *pmysql, const char *db)
CHECK_PRIV(drop_priv); CHECK_PRIV(drop_priv);
STRTOK_WHITESPACE(alter_priv, NULL); STRTOK_WHITESPACE(alter_priv, NULL);
CHECK_PRIV(alter_priv); CHECK_PRIV(alter_priv);
STRTOK_WHITESPACE(index_priv, NULL);
CHECK_PRIV(index_priv);
#undef STRTOK_WHITESPACE #undef STRTOK_WHITESPACE
#undef CHECK_PRIV #undef CHECK_PRIV
sprintf(query, "insert into db (host, db, user, select_priv, insert_priv, " sprintf(query, "insert into db (host, db, user, select_priv, insert_priv, "
"update_priv, delete_priv, create_priv, drop_priv, alter_priv) values " "update_priv, delete_priv, create_priv, drop_priv, alter_priv, index_priv) values "
"('%%', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s')", "('%%', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s')",
db, user, select_priv, insert_priv, update_priv, delete_priv, db, user, select_priv, insert_priv, update_priv, delete_priv,
create_priv, drop_priv, alter_priv); create_priv, drop_priv, alter_priv, index_priv);
queries[lines] = strdup(query); queries[lines] = strdup(query);
lines++; lines++;
if (lines >= MAX_GRANTS) if (lines >= MAX_GRANTS)

183
pwyacc.c
View File

@ -1,15 +1,15 @@
/* A Bison parser, made from pwyacc.y /* A Bison parser, made from pwyacc.y
by GNU Bison version 1.25 by GNU Bison version 1.27
*/ */
#define YYBISON 1 /* Identify Bison output. */ #define YYBISON 1 /* Identify Bison output. */
#define SET 258 #define SET 257
#define HOST 259 #define HOST 258
#define USER 260 #define USER 259
#define PASSWORD 261 #define PASSWORD 260
#define STRING 262 #define STRING 261
#line 8 "pwyacc.y" #line 8 "pwyacc.y"
@ -33,7 +33,7 @@ int config_set_string_var(int var, const char *value);
#define YYFLAG -32768 #define YYFLAG -32768
#define YYNTBASE 9 #define YYNTBASE 9
#define YYTRANSLATE(x) ((unsigned)(x) <= 262 ? yytranslate[x] : 12) #define YYTRANSLATE(x) ((unsigned)(x) <= 261 ? yytranslate[x] : 12)
static const char yytranslate[] = { 0, static const char yytranslate[] = { 0,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
@ -61,8 +61,8 @@ static const char yytranslate[] = { 0,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 1, 2, 3, 4, 5, 2, 2, 2, 2, 2, 1, 3, 4, 5, 6,
6, 7 7
}; };
#if YYDEBUG != 0 #if YYDEBUG != 0
@ -130,6 +130,7 @@ static const short yycheck[] = { 4,
}; };
/* -*-C-*- Note some compilers choke on comments on `#line' lines. */ /* -*-C-*- Note some compilers choke on comments on `#line' lines. */
#line 3 "/store/share/bison.simple" #line 3 "/store/share/bison.simple"
/* This file comes from bison-1.27. */
/* Skeleton output parser for bison, /* Skeleton output parser for bison,
Copyright (C) 1984, 1989, 1990 Free Software Foundation, Inc. Copyright (C) 1984, 1989, 1990 Free Software Foundation, Inc.
@ -146,47 +147,67 @@ static const short yycheck[] = { 4,
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
/* As a special exception, when this file is copied by Bison into a /* As a special exception, when this file is copied by Bison into a
Bison output file, you may use that output file without restriction. Bison output file, you may use that output file without restriction.
This special exception was added by the Free Software Foundation This special exception was added by the Free Software Foundation
in version 1.24 of Bison. */ in version 1.24 of Bison. */
#ifndef alloca
#ifdef __GNUC__
#define alloca __builtin_alloca
#else /* not GNU C. */
#if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__) || defined (__sparc) || defined (__sgi)
#include <alloca.h>
#else /* not sparc */
#if defined (MSDOS) && !defined (__TURBOC__)
#include <malloc.h>
#else /* not MSDOS, or __TURBOC__ */
#if defined(_AIX)
#include <malloc.h>
#pragma alloca
#else /* not MSDOS, __TURBOC__, or _AIX */
#ifdef __hpux
#ifdef __cplusplus
extern "C" {
void *alloca (unsigned int);
};
#else /* not __cplusplus */
void *alloca ();
#endif /* not __cplusplus */
#endif /* __hpux */
#endif /* not _AIX */
#endif /* not MSDOS, or __TURBOC__ */
#endif /* not sparc. */
#endif /* not GNU C. */
#endif /* alloca not defined. */
/* This is the parser code that is written into each bison parser /* This is the parser code that is written into each bison parser
when the %semantic_parser declaration is not specified in the grammar. when the %semantic_parser declaration is not specified in the grammar.
It was written by Richard Stallman by simplifying the hairy parser It was written by Richard Stallman by simplifying the hairy parser
used when %semantic_parser is specified. */ used when %semantic_parser is specified. */
#ifndef YYSTACK_USE_ALLOCA
#ifdef alloca
#define YYSTACK_USE_ALLOCA
#else /* alloca not defined */
#ifdef __GNUC__
#define YYSTACK_USE_ALLOCA
#define alloca __builtin_alloca
#else /* not GNU C. */
#if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__) || defined (__sparc) || defined (__sgi) || (defined (__sun) && defined (__i386))
#define YYSTACK_USE_ALLOCA
#include <alloca.h>
#else /* not sparc */
/* We think this test detects Watcom and Microsoft C. */
/* This used to test MSDOS, but that is a bad idea
since that symbol is in the user namespace. */
#if (defined (_MSDOS) || defined (_MSDOS_)) && !defined (__TURBOC__)
#if 0 /* No need for malloc.h, which pollutes the namespace;
instead, just don't use alloca. */
#include <malloc.h>
#endif
#else /* not MSDOS, or __TURBOC__ */
#if defined(_AIX)
/* I don't know what this was needed for, but it pollutes the namespace.
So I turned it off. rms, 2 May 1997. */
/* #include <malloc.h> */
#pragma alloca
#define YYSTACK_USE_ALLOCA
#else /* not MSDOS, or __TURBOC__, or _AIX */
#if 0
#ifdef __hpux /* haible@ilog.fr says this works for HPUX 9.05 and up,
and on HPUX 10. Eventually we can turn this on. */
#define YYSTACK_USE_ALLOCA
#define alloca __builtin_alloca
#endif /* __hpux */
#endif
#endif /* not _AIX */
#endif /* not MSDOS, or __TURBOC__ */
#endif /* not sparc */
#endif /* not GNU C */
#endif /* alloca not defined */
#endif /* YYSTACK_USE_ALLOCA not defined */
#ifdef YYSTACK_USE_ALLOCA
#define YYSTACK_ALLOC alloca
#else
#define YYSTACK_ALLOC malloc
#endif
/* Note: there must be only one dollar sign in this file. /* Note: there must be only one dollar sign in this file.
It is replaced by the list of actions, each action It is replaced by the list of actions, each action
as one case of the switch. */ as one case of the switch. */
@ -195,8 +216,8 @@ void *alloca ();
#define yyclearin (yychar = YYEMPTY) #define yyclearin (yychar = YYEMPTY)
#define YYEMPTY -2 #define YYEMPTY -2
#define YYEOF 0 #define YYEOF 0
#define YYACCEPT return(0) #define YYACCEPT goto yyacceptlab
#define YYABORT return(1) #define YYABORT goto yyabortlab
#define YYERROR goto yyerrlab1 #define YYERROR goto yyerrlab1
/* Like YYERROR except do call yyerror. /* Like YYERROR except do call yyerror.
This remains here temporarily to ease the This remains here temporarily to ease the
@ -277,12 +298,12 @@ int yydebug; /* nonzero means print parse trace */
#ifndef YYMAXDEPTH #ifndef YYMAXDEPTH
#define YYMAXDEPTH 10000 #define YYMAXDEPTH 10000
#endif #endif
/* Prevent warning if -Wstrict-prototypes. */
#ifdef __GNUC__
int yyparse (void);
#endif
/* Define __yy_memcpy. Note that the size argument
should be passed with type unsigned int, because that is what the non-GCC
definitions require. With GCC, __builtin_memcpy takes an arg
of type size_t, but it can handle unsigned int. */
#if __GNUC__ > 1 /* GNU C and GNU C++ define this. */ #if __GNUC__ > 1 /* GNU C and GNU C++ define this. */
#define __yy_memcpy(TO,FROM,COUNT) __builtin_memcpy(TO,FROM,COUNT) #define __yy_memcpy(TO,FROM,COUNT) __builtin_memcpy(TO,FROM,COUNT)
#else /* not GNU C or C++ */ #else /* not GNU C or C++ */
@ -294,7 +315,7 @@ static void
__yy_memcpy (to, from, count) __yy_memcpy (to, from, count)
char *to; char *to;
char *from; char *from;
int count; unsigned int count;
{ {
register char *f = from; register char *f = from;
register char *t = to; register char *t = to;
@ -309,10 +330,10 @@ __yy_memcpy (to, from, count)
/* This is the most reliable way to avoid incompatibilities /* This is the most reliable way to avoid incompatibilities
in available built-in functions on various systems. */ in available built-in functions on various systems. */
static void static void
__yy_memcpy (char *to, char *from, int count) __yy_memcpy (char *to, char *from, unsigned int count)
{ {
register char *f = from;
register char *t = to; register char *t = to;
register char *f = from;
register int i = count; register int i = count;
while (i-- > 0) while (i-- > 0)
@ -322,7 +343,7 @@ __yy_memcpy (char *to, char *from, int count)
#endif #endif
#endif #endif
#line 196 "/store/share/bison.simple" #line 216 "/store/share/bison.simple"
/* The user can define YYPARSE_PARAM as the name of an argument to be passed /* The user can define YYPARSE_PARAM as the name of an argument to be passed
into yyparse. The argument should have type void *. into yyparse. The argument should have type void *.
@ -343,6 +364,15 @@ __yy_memcpy (char *to, char *from, int count)
#define YYPARSE_PARAM_DECL #define YYPARSE_PARAM_DECL
#endif /* not YYPARSE_PARAM */ #endif /* not YYPARSE_PARAM */
/* Prevent warning if -Wstrict-prototypes. */
#ifdef __GNUC__
#ifdef YYPARSE_PARAM
int yyparse (void *);
#else
int yyparse (void);
#endif
#endif
int int
yyparse(YYPARSE_PARAM_ARG) yyparse(YYPARSE_PARAM_ARG)
YYPARSE_PARAM_DECL YYPARSE_PARAM_DECL
@ -371,6 +401,7 @@ yyparse(YYPARSE_PARAM_ARG)
#endif #endif
int yystacksize = YYINITDEPTH; int yystacksize = YYINITDEPTH;
int yyfree_stacks = 0;
#ifdef YYPURE #ifdef YYPURE
int yychar; int yychar;
@ -455,18 +486,32 @@ yynewstate:
if (yystacksize >= YYMAXDEPTH) if (yystacksize >= YYMAXDEPTH)
{ {
yyerror("parser stack overflow"); yyerror("parser stack overflow");
if (yyfree_stacks)
{
free (yyss);
free (yyvs);
#ifdef YYLSP_NEEDED
free (yyls);
#endif
}
return 2; return 2;
} }
yystacksize *= 2; yystacksize *= 2;
if (yystacksize > YYMAXDEPTH) if (yystacksize > YYMAXDEPTH)
yystacksize = YYMAXDEPTH; yystacksize = YYMAXDEPTH;
yyss = (short *) alloca (yystacksize * sizeof (*yyssp)); #ifndef YYSTACK_USE_ALLOCA
__yy_memcpy ((char *)yyss, (char *)yyss1, size * sizeof (*yyssp)); yyfree_stacks = 1;
yyvs = (YYSTYPE *) alloca (yystacksize * sizeof (*yyvsp)); #endif
__yy_memcpy ((char *)yyvs, (char *)yyvs1, size * sizeof (*yyvsp)); yyss = (short *) YYSTACK_ALLOC (yystacksize * sizeof (*yyssp));
__yy_memcpy ((char *)yyss, (char *)yyss1,
size * (unsigned int) sizeof (*yyssp));
yyvs = (YYSTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yyvsp));
__yy_memcpy ((char *)yyvs, (char *)yyvs1,
size * (unsigned int) sizeof (*yyvsp));
#ifdef YYLSP_NEEDED #ifdef YYLSP_NEEDED
yyls = (YYLTYPE *) alloca (yystacksize * sizeof (*yylsp)); yyls = (YYLTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yylsp));
__yy_memcpy ((char *)yyls, (char *)yyls1, size * sizeof (*yylsp)); __yy_memcpy ((char *)yyls, (char *)yyls1,
size * (unsigned int) sizeof (*yylsp));
#endif #endif
#endif /* no yyoverflow */ #endif /* no yyoverflow */
@ -638,7 +683,7 @@ case 6:
break;} break;}
} }
/* the action file gets copied in in place of this dollarsign */ /* the action file gets copied in in place of this dollarsign */
#line 498 "/store/share/bison.simple" #line 542 "/store/share/bison.simple"
yyvsp -= yylen; yyvsp -= yylen;
yyssp -= yylen; yyssp -= yylen;
@ -833,6 +878,30 @@ yyerrhandle:
yystate = yyn; yystate = yyn;
goto yynewstate; goto yynewstate;
yyacceptlab:
/* YYACCEPT comes here. */
if (yyfree_stacks)
{
free (yyss);
free (yyvs);
#ifdef YYLSP_NEEDED
free (yyls);
#endif
}
return 0;
yyabortlab:
/* YYABORT comes here. */
if (yyfree_stacks)
{
free (yyss);
free (yyvs);
#ifdef YYLSP_NEEDED
free (yyls);
#endif
}
return 1;
} }
#line 32 "pwyacc.y" #line 32 "pwyacc.y"