RCSID("$Header$");
+struct owner_type {
+ int type;
+ char *name;
+};
+
struct string_list {
char *string;
struct string_list *next;
};
+#define M_ANY 0
+#define M_USER 1
+#define M_LIST 2
+#define M_KERBEROS 3
+#define M_NONE 4
+
/* argument parsing macro */
#define argis(a, b) (!strcmp(*arg + 1, a) || !strcmp(*arg + 1, b))
int info_flag, update_flag, create_flag, deact_flag, reg_flag;
int list_res_flag, update_res_flag, unformatted_flag, verbose, noauth;
+struct owner_type *sponsor;
struct string_list *reservation_add_queue, *reservation_remove_queue;
char *username, *whoami;
char *newlogin, *uid, *shell, *winshell, *last, *first, *middle, *u_status;
char *clearid, *class, *comment, *secure, *winhomedir, *winprofiledir;
+struct owner_type *parse_member(char *s);
+
static char *states[] = {
"Registerable (0)",
"Active (1)",
u_status = clearid = class = comment = secure = NULL;
winhomedir = winprofiledir = NULL;
reservation_add_queue = reservation_remove_queue = NULL;
+ sponsor = NULL;
whoami = argv[0];
/* parse args */
} else
usage(argv);
}
+ else if (argis("sp", "sponsor")) {
+ if (arg - argv < argc - 1) {
+ arg++;
+ update_flag++;
+ sponsor = parse_member(*arg);
+ } else
+ usage(argv);
+ }
else if (argis("ar", "addreservation")) {
if (arg - argv < argc - 1) {
arg++;
}
/* fire up Moira */
- status = mrcl_connect(server, "stanley", 11, !noauth);
+ status = mrcl_connect(server, "stanley", 12, !noauth);
if (status == MRCL_AUTH_ERROR)
{
com_err(whoami, 0, "Try the -noauth flag if you don't "
argv[U_WINPROFILEDIR] = winprofiledir;
else
argv[U_WINPROFILEDIR] = "[DFS]";
-
- status = wrap_mr_query("add_user_account", 15, argv, NULL, NULL);
+ if (sponsor)
+ {
+ argv[U_SPONSOR_NAME] = sponsor->name;
+ switch (sponsor->type)
+ {
+ case M_ANY:
+ case M_USER:
+ argv[U_SPONSOR_TYPE] = "USER";
+ status = wrap_mr_query("add_user_account", 17, argv, NULL, NULL);
+ if (sponsor->type != M_ANY || status != MR_USER)
+ break;
+
+ case M_LIST:
+ argv[U_SPONSOR_TYPE] = "LIST";
+ status = wrap_mr_query("add_user_account", 17, argv, NULL, NULL);
+ break;
+
+ case M_KERBEROS:
+ argv[U_SPONSOR_TYPE] = "KERBEROS";
+ status = mrcl_validate_kerberos_member(argv[U_SPONSOR_NAME],
+ &argv[U_SPONSOR_NAME]);
+ if (mrcl_get_message())
+ mrcl_com_err(whoami);
+ if (status == MRCL_REJECT)
+ exit(1);
+ status = wrap_mr_query("add_user_account", 17, argv, NULL, NULL);
+ break;
+
+ case M_NONE:
+ argv[U_SPONSOR_TYPE] = "NONE";
+ status = wrap_mr_query("add_user_account", 17, argv, NULL, NULL);
+ break;
+ }
+ }
+ else
+ {
+ argv[U_SPONSOR_TYPE] = "NONE";
+ argv[U_SPONSOR_NAME] = "NONE";
+
+ status = wrap_mr_query("add_user_account", 17, argv, NULL, NULL);
+ }
+
if (status)
{
com_err(whoami, status, "while adding user account.");
argv[13] = old_argv[12];
argv[14] = old_argv[13];
argv[15] = old_argv[14];
+ argv[16] = old_argv[15];
+ argv[17] = old_argv[16];
argv[0] = username;
if (newlogin)
argv[14] = winhomedir;
if (winprofiledir)
argv[15] = winprofiledir;
-
- status = wrap_mr_query("update_user_account", 16, argv, NULL, NULL);
+ if (sponsor)
+ {
+ argv[17] = sponsor->name;
+ switch (sponsor->type)
+ {
+ case M_ANY:
+ case M_USER:
+ argv[16] = "USER";
+ status = wrap_mr_query("update_user_account", 18, argv, NULL,
+ NULL);
+ if (sponsor->type != M_ANY || status != MR_USER)
+ break;
+
+ case M_LIST:
+ argv[16] = "LIST";
+ status = wrap_mr_query("update_user_account", 18, argv, NULL,
+ NULL);
+ break;
+
+ case M_KERBEROS:
+ argv[16] = "KERBEROS";
+ status = mrcl_validate_kerberos_member(argv[17], &argv[17]);
+ if (mrcl_get_message())
+ mrcl_com_err(whoami);
+ if (status == MRCL_REJECT)
+ exit(1);
+ status = wrap_mr_query("update_user_account", 18, argv, NULL,
+ NULL);
+ break;
+
+ case M_NONE:
+ argv[16] = "NONE";
+ status = wrap_mr_query("update_user_account", 18, argv, NULL,
+ NULL);
+ break;
+ }
+ }
+ else
+ status = wrap_mr_query("update_user_account", 18, argv, NULL, NULL);
if (status)
com_err(whoami, status, "while updating user.");
printf("User id: %-23s Login shell: %-10s\n", argv[U_UID], argv[U_SHELL]);
printf("Class: %-25s Windows Console Shell: %-10s\n", argv[U_CLASS],
argv[U_WINCONSOLESHELL]);
+ sprintf(tbuf, "%s %s", argv[U_SPONSOR_TYPE],
+ strcmp(argv[U_SPONSOR_TYPE], "NONE") ? argv[U_SPONSOR_NAME] : "");
+ printf("Sponsor: %-25s\n", tbuf);
printf("Account is: %-20s MIT ID number: %s\n",
UserState(atoi(argv[U_STATE])), argv[U_MITID]);
printf("Windows Home Directory: %s\n", argv[U_WINHOMEDIR]);
void show_user_info_unformatted(char **argv)
{
+ char tbuf[BUFSIZ];
int status;
printf("Login name: %s\n", argv[U_NAME]);
argv[U_MIDDLE]);
printf("User id: %s\n", argv[U_UID]);
printf("Class: %s\n", argv[U_CLASS]);
+ sprintf(tbuf, "%s %s", argv[U_SPONSOR_TYPE],
+ strcmp(argv[U_SPONSOR_TYPE], "NONE") ? argv[U_SPONSOR_NAME] : "");
+ printf("Sponsor: %s\n", tbuf);
printf("Login shell: %s\n", argv[U_SHELL]);
printf("Windows Console Shell: %s\n", argv[U_WINCONSOLESHELL]);
printf("Account is: %s\n", UserState(atoi(argv[U_STATE])));
"-dr | -deletereservation reservation");
fprintf(stderr, USAGE_OPTIONS_FORMAT, "-wh | -winhomedir winhomedir",
"-wp | -winprofiledir winprofiledir");
- fprintf(stderr, USAGE_OPTIONS_FORMAT, "-u | -unformatted",
- "-n | -noauth");
- fprintf(stderr, USAGE_OPTIONS_FORMAT, "-v | -verbose",
- "-db | -database host[:port]");
+ fprintf(stderr, USAGE_OPTIONS_FORMAT, "-sp | -sponsor sponsor",
+ "-u | -unformatted");
+ fprintf(stderr, USAGE_OPTIONS_FORMAT, "-n | -noauth",
+ "-v | -verbose");
+ fprintf(stderr, " %-39s\n", "-db | -database host[:port]");
exit(1);
}
+
+/* Parse a line of input, fetching a member. NULL is returned if a member
+ * is not found. ';' is a comment character.
+ */
+struct owner_type *parse_member(char *s)
+{
+ struct owner_type *m;
+ char *p, *lastchar;
+
+ while (*s && isspace(*s))
+ s++;
+ lastchar = p = s;
+ while (*p && *p != '\n' && *p != ';')
+ {
+ if (isprint(*p) && !isspace(*p))
+ lastchar = p++;
+ else
+ p++;
+ }
+ lastchar++;
+ *lastchar = '\0';
+ if (p == s || strlen(s) == 0)
+ return NULL;
+
+ if (!(m = malloc(sizeof(struct owner_type))))
+ return NULL;
+
+ if ((p = strchr(s, ':')))
+ {
+ *p = '\0';
+ m->name = ++p;
+ if (!strcasecmp("user", s))
+ m->type = M_USER;
+ else if (!strcasecmp("list", s))
+ m->type = M_LIST;
+ else if (!strcasecmp("kerberos", s))
+ m->type = M_KERBEROS;
+ else if (!strcasecmp("none", s))
+ m->type = M_NONE;
+ else
+ {
+ m->type = M_ANY;
+ *(--p) = ':';
+ m->name = s;
+ }
+ m->name = strdup(m->name);
+ }
+ else
+ {
+ m->name = strdup(s);
+ m->type = strcasecmp(s, "none") ? M_ANY : M_NONE;
+ }
+ return m;
+}
"modby", "modwith", "created", "creator",
};
-static char *gual_fields[] = {
+static char *gual11_fields[] = {
"login",
"login", "unix_uid", "shell", "winconsoleshell", "last", "first", "middle",
"status", "clearid", "class", "comments", "signature", "secure",
"creator",
};
+static char *gual_fields[] = {
+ "login",
+ "login", "unix_uid", "shell", "winconsoleshell", "last", "first", "middle",
+ "status", "clearid", "class", "comments", "signature", "secure",
+ "winhomedir", "winprofiledir", "sponsor_type", "sponsor_name", "modtime",
+ "modby", "modwith", "created", "creator",
+};
+
static char *gubl2_fields[] = {
"login",
"login", "unix_uid", "shell", "last", "first", "middle", "status",
"modtime", "modby", "modwith", "created", "creator",
};
-static char *guau_fields[] = {
+static char *guau11_fields[] = {
"unix_uid",
"login", "unix_uid", "shell", "winconsoleshell", "last", "first", "middle",
"status", "clearid", "class", "comments", "signature", "secure",
"creator",
};
+static char *guau_fields[] = {
+ "unix_uid",
+ "login", "unix_uid", "shell", "winconsoleshell", "last", "first", "middle",
+ "status", "clearid", "class", "comments", "signature", "secure",
+ "winhomedir", "winprofiledir", "sponsor_type", "sponsor_name", "modtime",
+ "modby", "modwith", "created", "creator",
+};
+
static char *guan2_fields[] = {
"first", "last",
"login", "unix_uid", "shell", "last", "first", "middle", "status",
"modtime", "modby", "modwith", "created", "creator",
};
-static char *guan_fields[] = {
+static char *guan11_fields[] = {
"first", "last",
"login", "unix_uid", "shell", "winconsoleshell", "last", "first", "middle",
"status", "clearid", "class", "comments", "signature", "secure",
"creator",
};
+static char *guan_fields[] = {
+ "first", "last",
+ "login", "unix_uid", "shell", "winconsoleshell", "last", "first", "middle",
+ "status", "clearid", "class", "comments", "signature", "secure",
+ "winhomedir", "winprofiledir", "sponsor_type", "sponsor_name", "modtime",
+ "modby", "modwith", "created", "creator",
+};
+
static struct validate guan2_validate =
{
0,
"modtime", "modby", "modwith", "created", "creator",
};
-static char *guac_fields[] = {
+static char *guac11_fields[] = {
"class",
"login", "unix_uid", "shell", "winconsoleshell", "last", "first", "middle",
"status", "clearid", "class", "comments", "signature", "secure",
"creator",
};
+static char *guac_fields[] = {
+ "class",
+ "login", "unix_uid", "shell", "winconsoleshell", "last", "first", "middle",
+ "status", "clearid", "class", "comments", "signature", "secure",
+ "winhomedir", "winprofiledir", "sponsor_type", "sponsor_name", "modtime",
+ "modby", "modwith", "created", "creator",
+};
+
static char *guam2_fields[] = {
"clearid",
"login", "unix_uid", "shell", "last", "first", "middle", "status",
"modtime", "modby", "modwith", "created", "creator",
};
-static char *guam_fields[] = {
+static char *guam11_fields[] = {
"clearid",
"login", "unix_uid", "shell", "winconsoleshell", "last", "first", "middle",
"status", "clearid", "class", "comments", "signature", "secure",
"creator",
};
+static char *guam_fields[] = {
+ "clearid",
+ "login", "unix_uid", "shell", "winconsoleshell", "last", "first", "middle",
+ "status", "clearid", "class", "comments", "signature", "secure",
+ "winhomedir", "winprofiledir", "sponsor_type", "sponsor_name", "modtime",
+ "modby", "modwith", "created", "creator",
+};
+
+static char *guas_fields[] = {
+ "sponsor_type", "sponsor_name",
+ "login",
+};
+
+static struct valobj guas_valobj[] = {
+ {V_TYPE, 0, 0, "ace_type", 0, MR_ACE},
+ {V_TYPEDATA, 1, 0, "list_id", 0, MR_ACE},
+};
+
+static struct validate guas_validate = {
+ guas_valobj,
+ 2,
+ 0,
+ 0,
+ 0,
+ 0,
+ access_member,
+ 0,
+ get_user_account_by_sponsor,
+};
+
static char *gubu2_fields[] = {
"unix_uid",
"login", "unix_uid", "shell", "last", "first", "middle", "status",
"middle", "status", "clearid", "class", "comments", "signature", "secure",
};
-static char *auac_fields[] = {
+static char *auac11_fields[] = {
"login", "unix_uid", "shell", "winconsoleshell", "last", "first", "middle",
"status", "clearid", "class", "comments", "signature", "secure",
"winhomedir", "winprofiledir",
};
+static char *auac_fields[] = {
+ "login", "unix_uid", "shell", "winconsoleshell", "last", "first", "middle",
+ "status", "clearid", "class", "comments", "signature", "secure",
+ "winhomedir", "winprofiledir", "sponsor_type", "sponsor_name",
+};
+
static struct valobj auac2_valobj[] = {
{V_CHAR, 0, USERS_TABLE, "login"},
{V_NUM, 1},
{V_NUM, 12},
};
+static struct valobj auac11_valobj[] = {
+ {V_CHAR, 0, USERS_TABLE, "login"},
+ {V_NUM, 1},
+ {V_CHAR, 2, USERS_TABLE, "shell"},
+ {V_CHAR, 3, USERS_TABLE, "winconsoleshell"},
+ {V_CHAR, 4, USERS_TABLE, "last"},
+ {V_CHAR, 5, USERS_TABLE, "first"},
+ {V_CHAR, 6, USERS_TABLE, "middle"},
+ {V_NUM, 7},
+ {V_CHAR, 8, USERS_TABLE, "clearid"},
+ {V_TYPE, 9, 0, "class", 0, MR_BAD_CLASS},
+ {V_ID, 10, STRINGS_TABLE, "string", "string_id", MR_NO_MATCH},
+ {V_NUM, 12},
+ {V_LEN, 13, USERS_TABLE, "winhomedir"},
+ {V_LEN, 14, USERS_TABLE, "winprofiledir"},
+};
+
static struct valobj auac_valobj[] = {
{V_CHAR, 0, USERS_TABLE, "login"},
{V_NUM, 1},
{V_NUM, 12},
{V_LEN, 13, USERS_TABLE, "winhomedir"},
{V_LEN, 14, USERS_TABLE, "winprofiledir"},
+ {V_TYPE, 15, 0, "ace_type", 0, MR_ACE},
+ {V_TYPEDATA, 16, 0, 0, "list_id", MR_ACE},
};
static struct validate auac2_validate = {
followup_ausr,
};
+static struct validate auac11_validate = {
+ auac11_valobj,
+ 14,
+ "login",
+ "login = '%s'",
+ 1,
+ "users_id",
+ 0,
+ setup_ausr,
+ followup_ausr,
+};
+
static struct validate auac_validate = {
auac_valobj,
- 14,
+ 16,
"login",
"login = '%s'",
1,
followup_ausr,
};
+static struct validate ausr11_validate = {
+ auac11_valobj,
+ 12,
+ "login",
+ "login = '%s'",
+ 1,
+ "users_id",
+ 0,
+ setup_ausr,
+ followup_ausr,
+};
+
static struct validate ausr_validate = {
auac_valobj,
- 12,
+ 14,
"login",
"login = '%s'",
1,
"middle", "status", "clearid", "class", "comments", "signature", "secure",
};
-static char *uuac_fields[] = {
+static char *uuac11_fields[] = {
"login",
"newlogin", "unix_uid", "shell", "winconsoleshell", "last", "first",
"middle", "status", "clearid", "class", "comments", "signature", "secure",
"winhomedir", "winprofiledir",
};
+static char *uuac_fields[] = {
+ "login",
+ "newlogin", "unix_uid", "shell", "winconsoleshell", "last", "first",
+ "middle", "status", "clearid", "class", "comments", "signature", "secure",
+ "winhomedir", "winprofiledir, sponsor_type, sponsor_name",
+};
+
static struct valobj uuac2_valobj[] = {
{V_ID, 0, USERS_TABLE, "login", "users_id", MR_USER},
{V_RENAME, 1, USERS_TABLE, "login", "users_id", MR_NOT_UNIQUE},
{V_NUM, 13},
};
+static struct valobj uuac11_valobj[] = {
+ {V_ID, 0, USERS_TABLE, "login", "users_id", MR_USER},
+ {V_RENAME, 1, USERS_TABLE, "login", "users_id", MR_NOT_UNIQUE},
+ {V_NUM, 2},
+ {V_CHAR, 3, USERS_TABLE, "shell"},
+ {V_CHAR, 4, USERS_TABLE, "winconsoleshell"},
+ {V_CHAR, 5, USERS_TABLE, "first"},
+ {V_CHAR, 6, USERS_TABLE, "last"},
+ {V_CHAR, 7, USERS_TABLE, "middle"},
+ {V_NUM, 8},
+ {V_CHAR, 9, USERS_TABLE, "clearid"},
+ {V_TYPE, 10, 0, "class", 0, MR_BAD_CLASS},
+ {V_ID, 11, STRINGS_TABLE, "string", "string_id", MR_NO_MATCH},
+ {V_NUM, 13},
+ {V_LEN, 14, USERS_TABLE, "winhomedir"},
+ {V_LEN, 15, USERS_TABLE, "winprofiledir"},
+};
+
static struct valobj uuac_valobj[] = {
{V_ID, 0, USERS_TABLE, "login", "users_id", MR_USER},
{V_RENAME, 1, USERS_TABLE, "login", "users_id", MR_NOT_UNIQUE},
{V_NUM, 13},
{V_LEN, 14, USERS_TABLE, "winhomedir"},
{V_LEN, 15, USERS_TABLE, "winprofiledir"},
+ {V_TYPE, 16, 0, "ace_type", 0, MR_ACE},
+ {V_TYPEDATA, 17, 0, 0, "list_id", MR_ACE},
};
static struct validate uuac2_validate = {
set_modtime_by_id,
};
+static struct validate uuac11_validate = {
+ uuac11_valobj,
+ 15,
+ 0,
+ 0,
+ 0,
+ "users_id",
+ access_update_user,
+ setup_ausr,
+ set_modtime_by_id,
+};
+
static struct validate uuac_validate = {
uuac_valobj,
- 15,
+ 17,
0,
0,
0,
set_modtime_by_id,
};
+static struct validate uusr11_validate = {
+ uuac11_valobj,
+ 13,
+ 0,
+ 0,
+ 0,
+ "users_id",
+ 0,
+ setup_ausr,
+ set_modtime_by_id,
+};
+
static struct validate uusr_validate = {
uuac_valobj,
- 13,
+ 15,
0,
0,
0,
"u",
USERS_TABLE,
"u.login, u.unix_uid, u.shell, u.winconsoleshell, u.last, u.first, u.middle, u.status, u.clearid, u.type, str.string, CHR(0), u.secure, u.winhomedir, u.winprofiledir, TO_CHAR(u.modtime, 'DD-mon-YYYY HH24:MI:SS'), u.modby, u.modwith, TO_CHAR(u.created, 'DD-mon-YYYY HH24:MI:SS'), u.creator FROM users u, strings str",
- gual_fields,
+ gual11_fields,
20,
"u.login LIKE '%s' AND u.users_id != 0 AND u.comments = str.string_id",
1,
&gubl_validate,
},
+ {
+ /* Q_GUAL - GET_USER_ACCOUNT_BY_LOGIN, v12 */
+ "get_user_account_by_login",
+ "gual",
+ 12,
+ RETRIEVE,
+ "u",
+ USERS_TABLE,
+ "u.login, u.unix_uid, u.shell, u.winconsoleshell, u.last, u.first, u.middle, u.status, u.clearid, u.type, str.string, CHR(0), u.secure, u.winhomedir, u.winprofiledir, u.sponsor_type, u.sponsor_id, TO_CHAR(u.modtime, 'DD-mon-YYYY HH24:MI:SS'), u.modby, u.modwith, TO_CHAR(u.created, 'DD-mon-YYYY HH24:MI:SS'), u.creator FROM users u, strings str",
+ gual_fields,
+ 22,
+ "u.login LIKE '%s' AND u.users_id != 0 AND u.comments = str.string_id",
+ 1,
+ "u.login",
+ &gubl_validate,
+ },
+
{
/* Q_GUAU - GET_USER_ACCOUNT_BY_UID, v2 */
"get_user_account_by_uid",
"u",
USERS_TABLE,
"u.login, u.unix_uid, u.shell, u.winconsoleshell, u.last, u.first, u.middle, u.status, u.clearid, u.type, str.string, CHR(0), u.secure, u.winhomedir, u.winprofiledir, TO_CHAR(u.modtime, 'DD-mon-YYYY HH24:MI:SS'), u.modby, u.modwith, TO_CHAR(u.created, 'DD-mon-YYYY HH24:MI:SS'), u.creator FROM users u, strings str",
- guau_fields,
+ guau3_fields,
20,
"u.unix_uid = %s AND u.users_id != 0 AND u.comments = str.string_id",
1,
&gubu_validate,
},
+ {
+ /* Q_GUAU - GET_USER_ACCOUNT_BY_UID, v12 */
+ "get_user_account_by_uid",
+ "guau",
+ 12,
+ RETRIEVE,
+ "u",
+ USERS_TABLE,
+ "u.login, u.unix_uid, u.shell, u.winconsoleshell, u.last, u.first, u.middle, u.status, u.clearid, u.type, str.string, CHR(0), u.secure, u.winhomedir, u.winprofiledir, u.sponsor_type, u.sponsor_id, TO_CHAR(u.modtime, 'DD-mon-YYYY HH24:MI:SS'), u.modby, u.modwith, TO_CHAR(u.created, 'DD-mon-YYYY HH24:MI:SS'), u.creator FROM users u, strings str",
+ guau_fields,
+ 22,
+ "u.unix_uid = %s AND u.users_id != 0 AND u.comments = str.string_id",
+ 1,
+ "u.login",
+ &gubu_validate,
+ },
+
{
/* Q_GUAN - GET_USER_ACCOUNT_BY_NAME, v2 */
"get_user_account_by_name",
"u",
USERS_TABLE,
"u.login, u.unix_uid, u.shell, u.winconsoleshell, u.last, u.first, u.middle, u.status, u.clearid, u.type, str.string, CHR(0), u.secure, u.winhomedir, u.winprofiledir, TO_CHAR(u.modtime, 'DD-mon-YYYY HH24:MI:SS'), u.modby, u.modwith, TO_CHAR(u.created, 'DD-mon-YYYY HH24:MI:SS'), u.creator FROM users u, strings str",
- guan_fields,
+ guan11_fields,
20,
"u.first LIKE '%s' AND u.last LIKE '%s' AND u.users_id != 0 and u.comments = str.string_id",
2,
&guan_validate,
},
+ {
+ /* Q_GUAN - GET_USER_ACCOUNT_BY_NAME, v12 */
+ "get_user_account_by_name",
+ "guan",
+ 12,
+ RETRIEVE,
+ "u",
+ USERS_TABLE,
+ "u.login, u.unix_uid, u.shell, u.winconsoleshell, u.last, u.first, u.middle, u.status, u.clearid, u.type, str.string, CHR(0), u.secure, u.winhomedir, u.winprofiledir, u.sponsor_type, u.sponsor_id, TO_CHAR(u.modtime, 'DD-mon-YYYY HH24:MI:SS'), u.modby, u.modwith, TO_CHAR(u.created, 'DD-mon-YYYY HH24:MI:SS'), u.creator FROM users u, strings str",
+ guan_fields,
+ 22,
+ "u.first LIKE '%s' AND u.last LIKE '%s' AND u.users_id != 0 and u.comments = str.string_id",
+ 2,
+ "u.login",
+ &guan_validate,
+ },
+
{
/* Q_GUAC - GET_USER_ACCOUNT_BY_CLASS, v2 */
"get_user_account_by_class",
"u",
USERS_TABLE,
"u.login, u.unix_uid, u.shell, u.winconsoleshell, u.last, u.first, u.middle, u.status, u.clearid, u.type, str.string, CHR(0), u.secure, u.winhomedir, u.winprofiledir, TO_CHAR(u.modtime, 'DD-mon-YYYY HH24:MI:SS'), u.modby, u.modwith, TO_CHAR(u.created, 'DD-mon-YYYY HH24:MI:SS'), u.creator FROM users u, strings str",
- guac_fields,
+ guac11_fields,
20,
"u.type = UPPER('%s') AND u.users_id != 0 AND u.comments = str.string_id",
1,
&guan_validate,
},
+ {
+ /* Q_GUAC - GET_USER_ACCOUNT_BY_CLASS, v12 */
+ "get_user_account_by_class",
+ "guac",
+ 12,
+ RETRIEVE,
+ "u",
+ USERS_TABLE,
+ "u.login, u.unix_uid, u.shell, u.winconsoleshell, u.last, u.first, u.middle, u.status, u.clearid, u.type, str.string, CHR(0), u.secure, u.winhomedir, u.winprofiledir, u.sponsor_type, u.sponsor_id, TO_CHAR(u.modtime, 'DD-mon-YYYY HH24:MI:SS'), u.modby, u.modwith, TO_CHAR(u.created, 'DD-mon-YYYY HH24:MI:SS'), u.creator FROM users u, strings str",
+ guac_fields,
+ 22,
+ "u.type = UPPER('%s') AND u.users_id != 0 AND u.comments = str.string_id",
+ 1,
+ "u.login",
+ &guan_validate,
+ },
+
{
/* Q_GUAM - GET_USER_ACCOUNT_BY_MITID, v2 */
"get_user_account_by_id",
"u",
USERS_TABLE,
"u.login, u.unix_uid, u.shell, u.winconsoleshell, u.last, u.first, u.middle, u.status, u.clearid, u.type, str.string, CHR(0), u.secure, u.winhomedir, u.winprofiledir, TO_CHAR(u.modtime, 'DD-mon-YYYY HH24:MI:SS'), u.modby, u.modwith, TO_CHAR(u.created, 'DD-mon-YYYY HH24:MI:SS'), u.creator FROM users u, strings str",
- guam_fields,
+ guam11_fields,
20,
"u.clearid LIKE '%s' AND u.users_id != 0 AND u.comments = str.string_id",
1,
&guan_validate,
},
+ {
+ /* Q_GUAM - GET_USER_ACCOUNT_BY_MITID, v12 */
+ "get_user_account_by_id",
+ "guai",
+ 12,
+ RETRIEVE,
+ "u",
+ USERS_TABLE,
+ "u.login, u.unix_uid, u.shell, u.winconsoleshell, u.last, u.first, u.middle, u.status, u.clearid, u.type, str.string, CHR(0), u.secure, u.winhomedir, u.winprofiledir, u.sponsor_type, u.sponsor_id, TO_CHAR(u.modtime, 'DD-mon-YYYY HH24:MI:SS'), u.modby, u.modwith, TO_CHAR(u.created, 'DD-mon-YYYY HH24:MI:SS'), u.creator FROM users u, strings str",
+ guam_fields,
+ 22,
+ "u.clearid LIKE '%s' AND u.users_id != 0 AND u.comments = str.string_id",
+ 1,
+ "u.login",
+ &guan_validate,
+ },
+
+ {
+ /* Q_GUAS - GET_USER_ACCOUNT_BY_SPONSOR, v12 */
+ "get_user_account_by_sponsor",
+ "guas",
+ 12,
+ RETRIEVE,
+ 0,
+ 0,
+ 0,
+ guas_fields,
+ 1,
+ 0,
+ 2,
+ NULL,
+ &guas_validate,
+ },
+
{
/* Q_GUBL - GET_USER_BY_LOGIN, v2 */
"get_user_by_login",
* but using up one argv element.
*/
"INTO users (login, unix_uid, shell, winconsoleshell, last, first, middle, status, clearid, type, comments, signature, secure, winhomedir, winprofiledir, users_id, created, creator) VALUES ('%s', %s, '%s', NVL('%s', CHR(0)), NVL('%s', CHR(0)), NVL('%s', CHR(0)), NVL('%s', CHR(0)), %s, NVL('%s', CHR(0)), '%s', %d, NVL(CHR(0), '%s'), %s, NVL('%s', CHR(0)), NVL('%s', CHR(0)), %s, SYSDATE, %s)",
- auac_fields,
+ auac11_fields,
15,
NULL,
0,
NULL,
+ &auac11_validate,
+ },
+
+ {
+ /* Q_AUAC - ADD_USER_ACCOUNT, v12 */ /* uses prefetch_value() for users_id */
+ "add_user_account",
+ "auac",
+ 12,
+ APPEND,
+ "u",
+ USERS_TABLE,
+ /* We set signature to "NVL(CHR(0), '%s')", which is to say, "CHR(0)",
+ * but using up one argv element.
+ */
+ "INTO users (login, unix_uid, shell, winconsoleshell, last, first, middle, status, clearid, type, comments, signature, secure, winhomedir, winprofiledir, sponsor_type, sponsor_id, users_id, created, creator) VALUES ('%s', %s, '%s', NVL('%s', CHR(0)), NVL('%s', CHR(0)), NVL('%s', CHR(0)), NVL('%s', CHR(0)), %s, NVL('%s', CHR(0)), '%s', %d, NVL(CHR(0), '%s'), %s, NVL('%s', CHR(0)), NVL('%s', CHR(0)), '%s', %d, %s, SYSDATE, %s)",
+ auac_fields,
+ 17,
+ NULL,
+ 0,
+ NULL,
&auac_validate,
},
"u",
USERS_TABLE,
"INTO users (login, unix_uid, shell, winconsoleshell, last, first, middle, status, clearid, type, comments, signature, secure, winhomedir, winprofiledir, users_id, created, creator) VALUES ('%s', %s, '%s', NVL('%s', CHR(0)), NVL('%s', CHR(0)), NVL('%s', CHR(0)), %s, NVL('%s', CHR(0)), '%s', 0, CHR(0), 0, NVL('%s', CHR(0)), NVL('%s', CHR(0)), %s, SYSDATE, %s)",
- auac_fields,
+ auac11_fields,
12,
0,
0,
NULL,
+ &ausr11_validate,
+ },
+
+ {
+ /* Q_AUSR - ADD_USER, v12 */ /* uses prefetch_value() for users_id */
+ "add_user",
+ "ausr",
+ 12,
+ APPEND,
+ "u",
+ USERS_TABLE,
+ "INTO users (login, unix_uid, shell, winconsoleshell, last, first, middle, status, clearid, type, comments, signature, secure, winhomedir, winprofiledir, sponsor_type, sponsor_id, users_id, created, creator) VALUES ('%s', %s, '%s', NVL('%s', CHR(0)), NVL('%s', CHR(0)), NVL('%s', CHR(0)), %s, NVL('%s', CHR(0)), '%s', 0, CHR(0), 0, NVL('%s', CHR(0)), NVL('%s', CHR(0)), '%s', %d, %s, SYSDATE, %s)",
+ auac_fields,
+ 14,
+ 0,
+ 0,
+ NULL,
&ausr_validate,
},
USERS_TABLE,
/* See comment in auac about signature. */
"users SET login = '%s', unix_uid = %s, shell = '%s', winconsoleshell = '%s', last = NVL('%s', CHR(0)), first = NVL('%s', CHR(0)), middle = NVL('%s', CHR(0)), status = %s, clearid = NVL('%s', CHR(0)), type = '%s', comments = %d, signature = NVL(CHR(0), '%s'), secure = %s, winhomedir = NVL('%s', CHR(0)), winprofiledir = NVL('%s', CHR(0))",
- uuac_fields,
+ uuac11_fields,
15,
"users_id = %d",
1,
NULL,
+ &uuac11_validate,
+ },
+
+ {
+ /* Q_UUAC - UPDATE_USER_ACCOUNT, v12 */
+ "update_user_account",
+ "uuac",
+ 12,
+ UPDATE,
+ "u",
+ USERS_TABLE,
+ /* See comment in auac about signature. */
+ "users SET login = '%s', unix_uid = %s, shell = '%s', winconsoleshell = '%s', last = NVL('%s', CHR(0)), first = NVL('%s', CHR(0)), middle = NVL('%s', CHR(0)), status = %s, clearid = NVL('%s', CHR(0)), type = '%s', comments = %d, signature = NVL(CHR(0), '%s'), secure = %s, winhomedir = NVL('%s', CHR(0)), winprofiledir = NVL('%s', CHR(0)), sponsor_type = '%s', sponsor_id = %d",
+ uuac_fields,
+ 17,
+ "users_id = %d",
+ 1,
+ NULL,
&uuac_validate,
},
"u",
USERS_TABLE,
"users SET login = '%s', unix_uid = %s, shell = '%s', winconsoleshell = '%s', last = NVL('%s', CHR(0)), first = NVL('%s', CHR(0)), middle = NVL('%s', CHR(0)), status = %s, clearid = NVL('%s', CHR(0)), type = '%s', winhomedir = NVL('%s', CHR(0)), winprofiledir = NVL('%s', CHR(0)) ",
- uuac_fields,
+ uuac11_fields,
+ 12,
+ "users_id = %d",
+ 1,
+ NULL,
+ &uusr11_validate,
+ },
+
+ {
+ /* Q_UUSR - UPDATE_USER, v12 */
+ "update_user",
+ "uusr",
12,
+ UPDATE,
+ "u",
+ USERS_TABLE,
+ "users SET login = '%s', unix_uid = %s, shell = '%s', winconsoleshell = '%s', last = NVL('%s', CHR(0)), first = NVL('%s', CHR(0)), middle = NVL('%s', CHR(0)), status = %s, clearid = NVL('%s', CHR(0)), type = '%s', winhomedir = NVL('%s', CHR(0)), winprofiledir = NVL('%s', CHR(0)), sponsor_type = '%s', sponsor_id = %d ",
+ uuac_fields,
+ 14,
"users_id = %d",
1,
NULL,