exit(1);
}
IIseterr(ingerr);
- initialize_sms_error_table ();
+ initialize_sms_error_table();
+ initialize_pt_error_table();
+ Initdb();
## ingres sms
## set lockmode session where level = table
## begin transaction
do_passwd();
-#if 0
-#define USERSMS 14487
- status = PR_AddToGroup(NULL, USERSMS, SYSADMINID);
- if (status) {
- prserror(status, "adding MR to system:administrators", 0, 0);
- }
-#endif
do_groups();
## end transaction
}
-prserror(status, msg, arg1, arg2)
-int status;
-char *msg;
-unsigned long arg1, arg2;
-{
- char buf[512];
-
- sprintf(buf, msg, arg1, arg2);
- switch (status) {
- case PREXIST:
- msg = "name already exists";
- break;
- case PRIDEXIST:
- msg = "ID already exists";
- break;
- case PRNOIDS:
- msg = "no IDs available";
- break;
- case PRDBFAIL:
- msg = "database failed";
- break;
- case PRNOENT:
- msg = "no space left in database";
- break;
- case PRPERM:
- msg = "permission denied";
- break;
- case PRNOTGROUP:
- msg = "not a group";
- break;
- case PRNOTUSER:
- msg = "not a user";
- break;
- case PRBADNAM:
- msg = "bad name";
- break;
- case 0:
- msg = "no error";
- break;
- default:
- msg = "unknown code";
- break;
- }
- fprintf(stderr, "%s (%d): %s\n", msg, status, buf);
-}
-
-
do_passwd()
##{
users = create_hash(10000);
## range of u is users
## retrieve (login = u.#login, uid = u.#uid, id = u.users_id)
-## where u.#status = 1 or u.#status = 2 {
+## where u.#uid > 0 and (u.#status = 1 or u.#status = 2) {
strtrim(login);
hash_store(users, id, uid);
- status = PR_INewEntry(NULL, login, uid, 0);
- if (status) {
- prserror(status, "adding user %s uid %d", login, uid);
- }
+ if (FindByID (0, uid))
+ status = PRIDEXIST;
+ else
+ status = CreateEntry(0, login, &uid, 1/*idflag*/, 0/*gflag*/,
+ SYSADMINID/*oid*/, SYSADMINID/*cid*/);
+ if (status)
+ fprintf(stderr, "Error adding user %s uid %d: %s\n",
+ login, uid, error_message(status));
## }
##}
do_groups()
##{
struct hash *groups;
- long u, g, status;
+ long u, g, status, gpos, upos;
+ struct prentry gentry, uentry;
## char name[33], namebuf[128];
## int gid, id, lid, hide;
-
+ int aid;
+
fprintf(stderr, "Doing groups\n");
/* make space for group list */
## retrieve (name = users.modtime) where users.users_id = 0
## retrieve (name = l.#name, gid = l.#gid, lid = l.list_id, hide = l.hidden)
-## where l.group != 0 and l.active != 0 {
+## where l.group != 0 and l.active != 0 and l.#gid > 0 {
strtrim(name);
sprintf(namebuf, "system:%s", name);
hash_store(groups, lid, -gid);
- status = PR_INewEntry(NULL, namebuf, -gid, SYSADMINID);
+ aid = -gid;
+ if (gpos = FindByID (0, aid))
+ status = PRIDEXIST;
+ else
+ status = CreateEntry(0,namebuf,&aid,1/*idflag*/,PRGRP/*gflag*/,
+ SYSADMINID/*oid*/, SYSADMINID/*cid*/);
if (status)
- prserror(status, "adding list %s gid %d", namebuf, -gid);
- if (hide) {
- status = PR_SetFieldsEntry
- (NULL/*call*/, -gid,
- PR_SF_ALLBITS/*mask*/,
- PRP_STATUS_MEM >> PRIVATE_SHIFT /*flags*/,
- 0/*ngroups*/, 0/*nusers*/, 0/*spare1*/, 0/*spare2*/);
+ fprintf(stderr, "Error adding group %s id %d: %s\n",
+ namebuf, aid, error_message(status));
+
+ /* If this list is hidden, set the pts entry to be s---- */
+ if (hide && (status==0 || status==PRIDEXIST)) {
+ if (!gpos)
+ gpos = FindByID(0, aid);
+ status = pr_ReadEntry(0, 0, gpos, &gentry);
+ if (!status) {
+ gentry.flags = PRGRP|PRACCESS|PRP_STATUS_ANY;
+ status = pr_WriteEntry(0, 0, gpos, &gentry);
+ }
if (status)
- prserror(status, "setting flags on list %s", namebuf);
+ fprintf(stderr, "Error setting flags on group %s: %s\n",
+ namebuf, error_message(status));
}
## }
## where m.member_type = "USER" {
if ((u = (long) hash_lookup(users, id)) &&
(g = (long) hash_lookup(groups, lid))) {
- status = PR_AddToGroup(NULL, u, g);
- if (status) {
- prserror(status, "adding %d to group %d", u, -g);
+ if (g==ANYUSERID || g==AUTHUSERID || u==ANONYMOUSID) {
+ status = PRPERM;
+ } else if ((gpos = FindByID(0, g)) && (upos = FindByID(0, u))) {
+ status = pr_ReadEntry(0,0,upos,&uentry);
+ if (!status) status = pr_ReadEntry(0,0,gpos,&gentry);
+ if (!status) status = AddToEntry (0, &gentry, gpos, u);
+ if (!status) status = AddToEntry (0, &uentry, upos, g);
+ } else {
+ status = PRNOENT;
}
+ if (status)
+ fprintf(stderr, "Error adding uid %d to group %d: %s\n",
+ u, -g, error_message(status));
}
## }