* Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California
*
- * $PostgreSQL: pgsql/src/bin/scripts/createuser.c,v 1.22 2005/12/12 15:41:52 momjian Exp $
+ * $PostgreSQL: pgsql/src/bin/scripts/createuser.c,v 1.23 2005/12/12 15:48:04 momjian Exp $
*
*-------------------------------------------------------------------------
*/
static void help(const char *progname);
+enum trivalue {
+ TRI_DEFAULT,
+ TRI_NO,
+ TRI_YES
+};
int
main(int argc, char *argv[])
const char *progname;
int optindex;
int c;
-
char *newuser = NULL;
char *host = NULL;
char *port = NULL;
char *conn_limit = NULL;
bool pwprompt = false;
char *newpassword = NULL;
- /*
- * Tri-valued variables. -1 is "NO", +1 is enable and 0 uses the
- * server default.
- */
- int createdb = 0;
- int superuser = 0;
- int createrole = 0;
- int inherit = 0;
- int login = 0;
- int encrypted = 0;
+ /* Tri-valued variables. */
+ enum trivalue createdb = TRI_DEFAULT,
+ superuser = TRI_DEFAULT,
+ createrole = TRI_DEFAULT,
+ inherit = TRI_DEFAULT,
+ login = TRI_DEFAULT,
+ encrypted = TRI_DEFAULT;
PQExpBufferData sql;
quiet = true;
break;
case 'd':
- createdb = +1;
+ createdb = TRI_YES;
break;
case 'D':
- createdb = -1;
+ createdb = TRI_NO;
break;
case 's':
case 'a':
- superuser = +1;
+ superuser = TRI_YES;
break;
case 'S':
case 'A':
- superuser = -1;
+ superuser = TRI_NO;
break;
case 'r':
- createrole = +1;
+ createrole = TRI_YES;
break;
case 'R':
- createrole = -1;
+ createrole = TRI_NO;
break;
case 'i':
- inherit = +1;
+ inherit = TRI_YES;
break;
case 'I':
- inherit = -1;
+ inherit = TRI_NO;
break;
case 'l':
- login = +1;
+ login = TRI_YES;
break;
case 'L':
- login = -1;
+ login = TRI_NO;
break;
case 'c':
conn_limit = optarg;
pwprompt = true;
break;
case 'E':
- encrypted = +1;
+ encrypted = TRI_YES;
break;
case 'N':
- encrypted = -1;
+ encrypted = TRI_NO;
break;
default:
fprintf(stderr, _("Try \"%s --help\" for more information.\n"), progname);
reply = simple_prompt("Shall the new role be a superuser? (y/n) ", 1, true);
if (check_yesno_response(reply) == 1)
- superuser = +1;
+ superuser = TRI_YES;
else
- superuser = -1;
+ superuser = TRI_NO;
}
- if (superuser == +1)
+ if (superuser == TRI_YES)
{
/* Not much point in trying to restrict a superuser */
- createdb = +1;
- createrole = +1;
+ createdb = TRI_YES;
+ createrole = TRI_YES;
}
if (createdb == 0)
reply = simple_prompt("Shall the new role be allowed to create databases? (y/n) ", 1, true);
if (check_yesno_response(reply) == 1)
- createdb = +1;
+ createdb = TRI_YES;
else
- createdb = -1;
+ createdb = TRI_NO;
}
if (createrole == 0)
reply = simple_prompt("Shall the new role be allowed to create more new roles? (y/n) ", 1, true);
if (check_yesno_response(reply) == 1)
- createrole = +1;
+ createrole = TRI_YES;
else
- createrole = -1;
+ createrole = TRI_NO;
}
if (inherit == 0)
- {
- /* silently default to YES */
- inherit = +1;
- }
+ inherit = TRI_YES;
if (login == 0)
- {
- /* silently default to YES */
- login = +1;
- }
+ login = TRI_YES;
initPQExpBuffer(&sql);
printfPQExpBuffer(&sql, "CREATE ROLE %s", fmtId(newuser));
if (newpassword)
{
- if (encrypted == +1)
+ if (encrypted == TRI_YES)
appendPQExpBuffer(&sql, " ENCRYPTED");
- if (encrypted == -1)
+ if (encrypted == TRI_NO)
appendPQExpBuffer(&sql, " UNENCRYPTED");
appendPQExpBuffer(&sql, " PASSWORD ");
appendStringLiteral(&sql, newpassword, false);
}
- if (superuser == +1)
+ if (superuser == TRI_YES)
appendPQExpBuffer(&sql, " SUPERUSER");
- if (superuser == -1)
+ if (superuser == TRI_NO)
appendPQExpBuffer(&sql, " NOSUPERUSER");
- if (createdb == +1)
+ if (createdb == TRI_YES)
appendPQExpBuffer(&sql, " CREATEDB");
- if (createdb == -1)
+ if (createdb == TRI_NO)
appendPQExpBuffer(&sql, " NOCREATEDB");
- if (createrole == +1)
+ if (createrole == TRI_YES)
appendPQExpBuffer(&sql, " CREATEROLE");
- if (createrole == -1)
+ if (createrole == TRI_NO)
appendPQExpBuffer(&sql, " NOCREATEROLE");
- if (inherit == +1)
+ if (inherit == TRI_YES)
appendPQExpBuffer(&sql, " INHERIT");
- if (inherit == -1)
+ if (inherit == TRI_NO)
appendPQExpBuffer(&sql, " NOINHERIT");
- if (login == +1)
+ if (login == TRI_YES)
appendPQExpBuffer(&sql, " LOGIN");
- if (login == -1)
+ if (login == TRI_NO)
appendPQExpBuffer(&sql, " NOLOGIN");
if (conn_limit != NULL)
appendPQExpBuffer(&sql, " CONNECTION LIMIT %s", conn_limit);