X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=webcit%2Fuseredit.c;h=3194c0159167a937d4f4364ee2381b7f54381709;hb=1a9e08616fa839db9a46a4f2c6d9e34420150b81;hp=fc54484480deb6a758654942da24597b785c59f1;hpb=8d9aad7ef8cd514fab1f4935a70a1c3f085321f0;p=citadel.git diff --git a/webcit/useredit.c b/webcit/useredit.c index fc5448448..3194c0159 100644 --- a/webcit/useredit.c +++ b/webcit/useredit.c @@ -6,15 +6,15 @@ #include "webserver.h" -/** +/* * show a list of available users to edit them * message the header message??? - * preselect which user should be selected in the browser + * preselect = which user should be selected in the browser */ -void select_user_to_edit(char *message, char *preselect) +void select_user_to_edit(const char *preselect) { output_headers(1, 0, 0, 0, 1, 0); - do_template("edituser_select", NULL); + do_template("aide_edituser_select", NULL); end_burst(); } @@ -34,7 +34,7 @@ typedef struct _UserListEntry { } UserListEntry; -UserListEntry* NewUserListOneEntry(StrBuf *SerializedUser) +UserListEntry* NewUserListOneEntry(StrBuf *SerializedUser, const char *Pos) { UserListEntry *ul; @@ -45,21 +45,22 @@ UserListEntry* NewUserListOneEntry(StrBuf *SerializedUser) ul->UserName = NewStrBuf(); ul->Passvoid = NewStrBuf(); - StrBufExtract_token(ul->UserName, SerializedUser, 0, '|'); - StrBufExtract_token(ul->Passvoid, SerializedUser, 1, '|'); - ul->Flags = (unsigned int)StrBufExtract_long(SerializedUser, 2, '|'); - ul->nLogons = StrBufExtract_int(SerializedUser, 3, '|'); - ul->nPosts = StrBufExtract_int(SerializedUser, 4, '|'); - ul->AccessLevel = StrBufExtract_int(SerializedUser, 5, '|'); - ul->UID = StrBufExtract_int(SerializedUser, 6, '|'); - ul->LastLogonT = StrBufExtract_long(SerializedUser, 7, '|'); - ul->DaysTillPurge = StrBufExtract_int(SerializedUser, 8, '|'); + StrBufExtract_NextToken(ul->UserName, SerializedUser, &Pos, '|'); + StrBufExtract_NextToken(ul->Passvoid, SerializedUser, &Pos, '|'); + ul->Flags = StrBufExtractNext_unsigned_long(SerializedUser, &Pos, '|'); + ul->nLogons = StrBufExtractNext_int( SerializedUser, &Pos, '|'); + ul->nPosts = StrBufExtractNext_int( SerializedUser, &Pos, '|'); + ul->AccessLevel = StrBufExtractNext_int( SerializedUser, &Pos, '|'); + ul->UID = StrBufExtractNext_int( SerializedUser, &Pos, '|'); + ul->LastLogonT = StrBufExtractNext_long( SerializedUser, &Pos, '|'); + ul->DaysTillPurge = StrBufExtractNext_int( SerializedUser, &Pos, '|'); return ul; } void DeleteUserListEntry(void *vUserList) { UserListEntry *ul = (UserListEntry*) vUserList; + if (!ul) return; FreeStrBuf(&ul->UserName); FreeStrBuf(&ul->Passvoid); free(ul); @@ -67,6 +68,7 @@ void DeleteUserListEntry(void *vUserList) UserListEntry* NewUserListEntry(StrBuf *SerializedUserList) { + const char *Pos = NULL; UserListEntry *ul; if (StrLength(SerializedUserList) < 8) @@ -76,13 +78,13 @@ UserListEntry* NewUserListEntry(StrBuf *SerializedUserList) ul->UserName = NewStrBuf(); ul->Passvoid = NewStrBuf(); - StrBufExtract_token(ul->UserName, SerializedUserList, 0, '|'); - ul->AccessLevel = StrBufExtract_int(SerializedUserList, 1, '|'); - ul->UID = StrBufExtract_int(SerializedUserList, 2, '|'); - ul->LastLogonT = StrBufExtract_long(SerializedUserList, 3, '|'); - ul->nLogons = StrBufExtract_int(SerializedUserList, 4, '|'); - ul->nPosts = StrBufExtract_int(SerializedUserList, 5, '|'); - StrBufExtract_token(ul->Passvoid, SerializedUserList, 6, '|'); + StrBufExtract_NextToken(ul->UserName, SerializedUserList, &Pos, '|'); + ul->AccessLevel = StrBufExtractNext_int( SerializedUserList, &Pos, '|'); + ul->UID = StrBufExtractNext_int( SerializedUserList, &Pos, '|'); + ul->LastLogonT = StrBufExtractNext_long(SerializedUserList, &Pos, '|'); + ul->nLogons = StrBufExtractNext_int( SerializedUserList, &Pos, '|'); + ul->nPosts = StrBufExtractNext_int( SerializedUserList, &Pos, '|'); + StrBufExtract_NextToken(ul->Passvoid, SerializedUserList, &Pos, '|'); ul->Flags = 0; ul->DaysTillPurge = -1; return ul; @@ -98,12 +100,14 @@ int CompareUserListName(const void *vUser1, const void *vUser2) return strcmp(ChrPtr(u1->UserName), ChrPtr(u2->UserName)); } + int CompareUserListNameRev(const void *vUser1, const void *vUser2) { UserListEntry *u1 = (UserListEntry*) GetSearchPayload(vUser1); UserListEntry *u2 = (UserListEntry*) GetSearchPayload(vUser2); return strcmp(ChrPtr(u2->UserName), ChrPtr(u1->UserName)); } + int GroupchangeUserListName(const void *vUser1, const void *vUser2) { UserListEntry *u1 = (UserListEntry*) vUser1; @@ -112,7 +116,7 @@ int GroupchangeUserListName(const void *vUser1, const void *vUser2) } /* - * Sort by AccessLevel + * Sort by access level */ int CompareAccessLevel(const void *vUser1, const void *vUser2) { @@ -121,6 +125,7 @@ int CompareAccessLevel(const void *vUser1, const void *vUser2) return (u1->AccessLevel > u2->AccessLevel); } + int CompareAccessLevelRev(const void *vUser1, const void *vUser2) { UserListEntry *u1 = (UserListEntry*) GetSearchPayload(vUser1); @@ -128,6 +133,7 @@ int CompareAccessLevelRev(const void *vUser1, const void *vUser2) return (u2->AccessLevel > u1->AccessLevel); } + int GroupchangeAccessLevel(const void *vUser1, const void *vUser2) { UserListEntry *u1 = (UserListEntry*) vUser1; @@ -136,7 +142,6 @@ int GroupchangeAccessLevel(const void *vUser1, const void *vUser2) return u2->AccessLevel != u1->AccessLevel; } - /* * Sort by UID */ @@ -147,6 +152,7 @@ int CompareUID(const void *vUser1, const void *vUser2) return (u1->UID > u2->UID); } + int CompareUIDRev(const void *vUser1, const void *vUser2) { UserListEntry *u1 = (UserListEntry*) GetSearchPayload(vUser1); @@ -154,6 +160,7 @@ int CompareUIDRev(const void *vUser1, const void *vUser2) return (u2->UID > u1->UID); } + int GroupchangeUID(const void *vUser1, const void *vUser2) { UserListEntry *u1 = (UserListEntry*) vUser1; @@ -172,6 +179,7 @@ int CompareLastLogon(const void *vUser1, const void *vUser2) return (u1->LastLogonT > u2->LastLogonT); } + int CompareLastLogonRev(const void *vUser1, const void *vUser2) { UserListEntry *u1 = (UserListEntry*) GetSearchPayload(vUser1); @@ -179,6 +187,7 @@ int CompareLastLogonRev(const void *vUser1, const void *vUser2) return (u2->LastLogonT > u1->LastLogonT); } + int GroupchangeLastLogon(const void *vUser1, const void *vUser2) { UserListEntry *u1 = (UserListEntry*) vUser1; @@ -197,6 +206,7 @@ int ComparenLogons(const void *vUser1, const void *vUser2) return (u1->nLogons > u2->nLogons); } + int ComparenLogonsRev(const void *vUser1, const void *vUser2) { UserListEntry *u1 = (UserListEntry*) GetSearchPayload(vUser1); @@ -204,6 +214,7 @@ int ComparenLogonsRev(const void *vUser1, const void *vUser2) return (u2->nLogons > u1->nLogons); } + int GroupchangenLogons(const void *vUser1, const void *vUser2) { UserListEntry *u1 = (UserListEntry*) vUser1; @@ -222,6 +233,7 @@ int ComparenPosts(const void *vUser1, const void *vUser2) return (u1->nPosts > u2->nPosts); } + int ComparenPostsRev(const void *vUser1, const void *vUser2) { UserListEntry *u1 = (UserListEntry*) GetSearchPayload(vUser1); @@ -229,6 +241,7 @@ int ComparenPostsRev(const void *vUser1, const void *vUser2) return (u2->nPosts > u1->nPosts); } + int GroupchangenPosts(const void *vUser1, const void *vUser2) { UserListEntry *u1 = (UserListEntry*) vUser1; @@ -240,9 +253,9 @@ int GroupchangenPosts(const void *vUser1, const void *vUser2) HashList *iterate_load_userlist(StrBuf *Target, WCTemplputParams *TP) { + int Done = 0; CompareFunc SortIt; - HashList *Hash; - char buf[SIZ]; + HashList *Hash = NULL; StrBuf *Buf; UserListEntry* ul; char nnn[64]; @@ -252,13 +265,18 @@ HashList *iterate_load_userlist(StrBuf *Target, WCTemplputParams *TP) memset(&SubTP, 0, sizeof(WCTemplputParams)); serv_puts("LIST"); - serv_getln(buf, sizeof buf); - if (buf[0] == '1') { + Buf = NewStrBuf(); + StrBuf_ServGetln(Buf); + if (GetServerStatus(Buf, NULL) == 1) { Hash = NewHash(1, NULL); - Buf = NewStrBuf(); - while ((len = StrBuf_ServGetln(Buf), - strcmp(ChrPtr(Buf), "000"))) { + while (!Done) { + len = StrBuf_ServGetln(Buf); + if ((len == 3) && + (strcmp(ChrPtr(Buf), "000")==0)) { + Done = 1; + break; + } ul = NewUserListEntry(Buf); if (ul == NULL) continue; @@ -266,16 +284,15 @@ HashList *iterate_load_userlist(StrBuf *Target, WCTemplputParams *TP) nUsed = snprintf(nnn, sizeof(nnn), "%d", nUsed+1); Put(Hash, nnn, nUsed, ul, DeleteUserListEntry); } - FreeStrBuf(&Buf); SubTP.Filter.ContextType = CTX_USERLIST; SortIt = RetrieveSort(&SubTP, HKEY("USER"), HKEY("user:uid"), 0); if (SortIt != NULL) SortByPayload(Hash, SortIt); else SortByPayload(Hash, CompareUID); - return Hash; } - return NULL; + FreeStrBuf(&Buf); + return Hash; } @@ -385,122 +402,153 @@ int ConditionalUserAccess(StrBuf *Target, WCTemplputParams *TP) * Locate the message number of a user's vCard in the current room * Returns the message id of his vcard */ -long locate_user_vcard_in_this_room() { - char buf[SIZ]; +long locate_user_vcard_in_this_room(message_summary **VCMsg, wc_mime_attachment **VCAtt) +{ + wcsession *WCC = WC; + HashPos *at; + HashPos *att; + const char *HashKey; + long HKLen; + void *vMsg; + message_summary *Msg; + wc_mime_attachment *Att; + int Done; + StrBuf *Buf; long vcard_msgnum = (-1L); - char content_type[SIZ]; - char partnum[SIZ]; int already_tried_creating_one = 0; + StrBuf *FoundCharset = NewStrBuf(); + StrBuf *Error = NULL; + SharedMessageStatus Stat; - struct stuff_t { - struct stuff_t *next; - long msgnum; - }; - - struct stuff_t *stuff = NULL; - struct stuff_t *ptr; + Buf = NewStrBuf(); TRYAGAIN: - /** Search for the user's vCard */ - serv_puts("MSGS ALL"); - serv_getln(buf, sizeof buf); - if (buf[0] == '1') while (serv_getln(buf, sizeof buf), strcmp(buf, "000")) { - ptr = malloc(sizeof(struct stuff_t)); - ptr->msgnum = atol(buf); - ptr->next = stuff; - stuff = ptr; - } - - /** Iterate through the message list looking for vCards */ - while (stuff != NULL) { - serv_printf("MSG0 %ld|2", stuff->msgnum); - serv_getln(buf, sizeof buf); - if (buf[0]=='1') { - while(serv_getln(buf, sizeof buf), strcmp(buf, "000")) { - if (!strncasecmp(buf, "part=", 5)) { - extract_token(partnum, &buf[5], 2, '|', sizeof partnum); - extract_token(content_type, &buf[5], 4, '|', sizeof content_type); - if ( (!strcasecmp(content_type, "text/x-vcard")) - || (!strcasecmp(content_type, "text/vcard")) ) { - vcard_msgnum = stuff->msgnum; + memset(&Stat, 0, sizeof(SharedMessageStatus)); + Stat.maxload = 10000; + Stat.lowest_found = (-1); + Stat.highest_found = (-1); + Done = 0; + /* Search for the user's vCard */ + if (load_msg_ptrs("MSGS ALL||||1", &Stat, NULL) > 0) { + at = GetNewHashPos(WCC->summ, 0); + while (GetNextHashPos(WCC->summ, at, &HKLen, &HashKey, &vMsg)) { + Msg = (message_summary*) vMsg; + Msg->MsgBody = (wc_mime_attachment*) malloc(sizeof(wc_mime_attachment)); + memset(Msg->MsgBody, 0, sizeof(wc_mime_attachment)); + Msg->MsgBody->msgnum = Msg->msgnum; + + load_message(Msg, FoundCharset, &Error); + + if (Msg->AllAttach != NULL) { + att = GetNewHashPos(Msg->AllAttach, 0); + while (GetNextHashPos(Msg->AllAttach, att, &HKLen, &HashKey, &vMsg) && + (vcard_msgnum == -1)) { + Att = (wc_mime_attachment*) vMsg; + if ( + (strcasecmp(ChrPtr(Att->ContentType), "text/x-vcard") == 0) + || (strcasecmp(ChrPtr(Att->ContentType), "text/vcard") == 0) + ) { + *VCAtt = Att; + *VCMsg = Msg; + vcard_msgnum = Msg->msgnum; + if (Att->Data == NULL) { + MimeLoadData(Att); + } } } + DeleteHashPos(&att); } + FreeStrBuf(&Error); /* don't care... */ + } - - ptr = stuff->next; - free(stuff); - stuff = ptr; + DeleteHashPos(&at); } - /** If there's no vcard, create one */ - if ((vcard_msgnum < 0) && (already_tried_creating_one == 0)) { + /* If there's no vcard, create one */ + if ((*VCMsg == NULL) && (already_tried_creating_one == 0)) { + FlushStrBuf(Buf); already_tried_creating_one = 1; serv_puts("ENT0 1|||4"); - serv_getln(buf, sizeof buf); - if (buf[0] == '4') { + StrBuf_ServGetln(Buf); + if (GetServerStatus(Buf, NULL) == 4) { serv_puts("Content-type: text/x-vcard"); serv_puts(""); serv_puts("begin:vcard"); serv_puts("end:vcard"); serv_puts("000"); } + else + lprintf(1, "Error while creating user vcard: %s\n", ChrPtr(Buf)); goto TRYAGAIN; } + FreeStrBuf(&Buf); + FreeStrBuf(&FoundCharset); return(vcard_msgnum); } -/** +/* * Display the form for editing a user's address book entry * username the name of the user * usernum the citadel-uid of the user */ -void display_edit_address_book_entry(char *username, long usernum) { - char roomname[SIZ]; - char buf[SIZ]; - char error_message[SIZ]; +void display_edit_address_book_entry(const char *username, long usernum) { + wcsession *WCC = WC; + message_summary *VCMsg = NULL; + wc_mime_attachment *VCAtt = NULL; + StrBuf *roomname; + StrBuf *Buf; long vcard_msgnum = (-1L); - /** Locate the user's config room, creating it if necessary */ - sprintf(roomname, "%010ld.%s", usernum, USERCONFIGROOM); - serv_printf("GOTO %s||1", roomname); - serv_getln(buf, sizeof buf); - if (buf[0] != '2') { - serv_printf("CRE8 1|%s|5|||1|", roomname); - serv_getln(buf, sizeof buf); - serv_printf("GOTO %s||1", roomname); - serv_getln(buf, sizeof buf); - if (buf[0] != '2') { - sprintf(error_message, - "" - "%s

\n", &buf[4]); - select_user_to_edit(error_message, username); + /* Locate the user's config room, creating it if necessary */ + Buf = NewStrBuf(); + roomname = NewStrBuf(); + StrBufPrintf(roomname, "%010ld.%s", usernum, USERCONFIGROOM); + serv_printf("GOTO %s||1", ChrPtr(roomname)); + StrBuf_ServGetln(Buf); + if (GetServerStatus(Buf, NULL) != 2) { + serv_printf("CRE8 1|%s|5|||1|", ChrPtr(roomname)); + StrBuf_ServGetln(Buf); + GetServerStatus(Buf, NULL); + serv_printf("GOTO %s||1", ChrPtr(roomname)); + StrBuf_ServGetln(Buf); + if (GetServerStatus(Buf, NULL) != 2) { + FlushStrBuf(WCC->ImportantMsg); + StrBufAppendBuf(WCC->ImportantMsg, Buf, 4); + select_user_to_edit(username); + FreeStrBuf(&Buf); + FreeStrBuf(&roomname); return; } } + FreeStrBuf(&Buf); - vcard_msgnum = locate_user_vcard_in_this_room(); + locate_user_vcard_in_this_room(&VCMsg, &VCAtt); - if (vcard_msgnum < 0) { - sprintf(error_message, - "%s

\n", - _("An error occurred while trying to create or edit this address book entry.") - ); - select_user_to_edit(error_message, username); + if (VCMsg == NULL) { + StrBufPlain(WCC->ImportantMsg, + _("An error occurred while trying to create or edit this address book entry."), + 0); + select_user_to_edit(username); + FreeStrBuf(&roomname); return; } - do_edit_vcard(vcard_msgnum, "1", "select_user_to_edit", roomname); + do_edit_vcard(vcard_msgnum, "1", + VCMsg, + VCAtt, + "select_user_to_edit", + ChrPtr(roomname)); + FreeStrBuf(&roomname); } -void display_edituser(char *supplied_username, int is_new) { +void display_edituser(const char *supplied_username, int is_new) { + const char *Pos; + wcsession *WCC = WC; UserListEntry* UL; StrBuf *Buf; - char error_message[1024]; - char MajorStatus; char username[256]; if (supplied_username != NULL) { @@ -513,32 +561,29 @@ void display_edituser(char *supplied_username, int is_new) { Buf = NewStrBuf(); serv_printf("AGUP %s", username); StrBuf_ServGetln(Buf); - MajorStatus = ChrPtr(Buf)[0]; - StrBufCutLeft(Buf, 4); - if (MajorStatus != '2') { - /*TODO ImportantMessage */ - sprintf(error_message, - "" - "%s

\n", ChrPtr(Buf)); - select_user_to_edit(error_message, username); + if (GetServerStatus(Buf, NULL) != 2) { + FlushStrBuf(WCC->ImportantMsg); + StrBufAppendBuf(WCC->ImportantMsg, Buf, 4); + select_user_to_edit(username); FreeStrBuf(&Buf); return; } else { - UL = NewUserListOneEntry(Buf); - if (havebstr("edit_abe_button")) { + Pos = ChrPtr(Buf) + 4; + UL = NewUserListOneEntry(Buf, Pos); + if ((UL != NULL) && havebstr("edit_abe_button")) { display_edit_address_book_entry(username, UL->UID); } - else if (havebstr("delete_button")) { + else if ((UL != NULL) && havebstr("delete_button")) { delete_user(username); } - else { + else if (UL != NULL) { WCTemplputParams SubTP; memset(&SubTP, 0, sizeof(WCTemplputParams)); SubTP.Filter.ContextType = CTX_USERLIST; SubTP.Context = UL; output_headers(1, 0, 0, 0, 1, 0); - DoTemplate(HKEY("userlist_detailview"), NULL, &SubTP); + DoTemplate(HKEY("aide_edituser_detailview"), NULL, &SubTP); end_burst(); } DeleteUserListEntry(UL); @@ -547,25 +592,24 @@ void display_edituser(char *supplied_username, int is_new) { FreeStrBuf(&Buf); } -/** +/* * do the backend operation of the user edit on the server */ void edituser(void) { - char message[SIZ]; - char buf[SIZ]; + wcsession *WCC = WC; int is_new = 0; unsigned int flags = 0; - char *username; + const char *username; is_new = ibstr("is_new"); - safestrncpy(message, "", sizeof message); username = bstr("username"); if (!havebstr("ok_button")) { - safestrncpy(message, _("Changes were not saved."), sizeof message); - } - + StrBufPlain(WCC->ImportantMsg, _("Changes were not saved."), -1); + } else { + StrBuf *Buf = NewStrBuf(); + flags = ibstr("flags"); if (yesbstr("inetmail")) { flags |= US_INTERNET; @@ -576,11 +620,10 @@ void edituser(void) { if ((havebstr("newname")) && (strcasecmp(bstr("username"), bstr("newname")))) { serv_printf("RENU %s|%s", bstr("username"), bstr("newname")); - serv_getln(buf, sizeof buf); - if (buf[0] != '2') { - sprintf(&message[strlen(message)], - "" - "%s

\n", &buf[4]); + StrBuf_ServGetln(Buf); + if (GetServerStatus(Buf, NULL) == 2) { + FlushStrBuf(WCC->ImportantMsg); + StrBufAppendBuf(WCC->ImportantMsg, Buf, 4); } else { username = bstr("newname"); @@ -598,15 +641,14 @@ void edituser(void) { bstr("lastcall"), bstr("purgedays") ); - serv_getln(buf, sizeof buf); - if (buf[0] != '2') { - sprintf(&message[strlen(message)], - "" - "%s

\n", &buf[4]); + StrBuf_ServGetln(Buf); + if (GetServerStatus(Buf, NULL) == 2) { + StrBufAppendBuf(WCC->ImportantMsg, Buf, 4); } + FreeStrBuf(&Buf); } - /** + /* * If we are in the middle of creating a new user, move on to * the vCard edit screen. */ @@ -614,7 +656,7 @@ void edituser(void) { display_edit_address_book_entry(username, lbstr("usernum") ); } else { - select_user_to_edit(message, username); + select_user_to_edit(username); } } @@ -623,86 +665,86 @@ void edituser(void) { * username the name of the user to remove */ void delete_user(char *username) { - char buf[SIZ]; - char message[SIZ]; - + wcsession *WCC = WC; + StrBuf *Buf; + + Buf = NewStrBuf(); serv_printf("ASUP %s|0|0|0|0|0|", username); - serv_getln(buf, sizeof buf); - if (buf[0] != '2') { - sprintf(message, - "" - "%s

\n", &buf[4]); - } - else { - safestrncpy(message, "", sizeof message); - } - select_user_to_edit(message, bstr("username")); + StrBuf_ServGetln(Buf); + if (GetServerStatus(Buf, NULL) != 2) + StrBufAppendBuf(WCC->ImportantMsg, Buf, 4); + + select_user_to_edit( bstr("username")); + FreeStrBuf(&Buf); } -/** +/* * create a new user * take the web environment username and create it on the citadel server */ void create_user(void) { - char buf[SIZ]; - char error_message[SIZ]; - char username[SIZ]; - - safestrncpy(username, bstr("username"), sizeof username); + wcsession *WCC = WC; + long FullState; + StrBuf *Buf; + const char *username; + Buf = NewStrBuf(); + username = bstr("username"); serv_printf("CREU %s", username); - serv_getln(buf, sizeof buf); - - if (buf[0] == '2') { + StrBuf_ServGetln(Buf); + if (GetServerStatus(Buf, &FullState) == 2) { sprintf(WC->ImportantMessage, _("A new user has been created.")); display_edituser(username, 1); } - else if (!strncmp(buf, "570", 3)) { - sprintf(error_message, - "" - "%s

\n", - _("You are attempting to create a new user from within Citadel " - "while running in host based authentication mode. In this mode, " - "you must create new users on the host system, not within Citadel.") - ); - select_user_to_edit(error_message, NULL); + else if (FullState == 570) { + StrBufPlain(WCC->ImportantMsg, + _("You are attempting to create a new user from within Citadel " + "while running in host based authentication mode. In this mode, " + "you must create new users on the host system, not within Citadel."), + 0); + select_user_to_edit(NULL); } else { - sprintf(error_message, - "" - "%s

\n", &buf[4]); - select_user_to_edit(error_message, NULL); + StrBufAppendBuf(WCC->ImportantMsg, Buf, 4); + select_user_to_edit(NULL); } + FreeStrBuf(&Buf); +} + +void _select_user_to_edit(void) { + select_user_to_edit(NULL); } -void _select_user_to_edit(void){select_user_to_edit(NULL, NULL);} -void _display_edituser(void) {display_edituser(NULL, 0);} +void _display_edituser(void) { + display_edituser(NULL, 0); +} + void InitModule_USEREDIT (void) { - WebcitAddUrlHandler(HKEY("select_user_to_edit"), _select_user_to_edit, 0); - WebcitAddUrlHandler(HKEY("display_edituser"), _display_edituser, 0); - WebcitAddUrlHandler(HKEY("edituser"), edituser, 0); - WebcitAddUrlHandler(HKEY("create_user"), create_user, 0); - - RegisterNamespace("USERLIST:USERNAME", 0, 1, tmplput_USERLIST_UserName, CTX_USERLIST); - RegisterNamespace("USERLIST:PASSWD", 0, 1, tmplput_USERLIST_Password, CTX_USERLIST); - RegisterNamespace("USERLIST:ACCLVLNO", 0, 0, tmplput_USERLIST_AccessLevelNo, CTX_USERLIST); - RegisterNamespace("USERLIST:ACCLVLSTR", 0, 0, tmplput_USERLIST_AccessLevelStr, CTX_USERLIST); - RegisterNamespace("USERLIST:UID", 0, 0, tmplput_USERLIST_UID, CTX_USERLIST); - RegisterNamespace("USERLIST:LASTLOGON:STR", 0, 0, tmplput_USERLIST_LastLogonStr, CTX_USERLIST); - RegisterNamespace("USERLIST:LASTLOGON:NO", 0, 0, tmplput_USERLIST_LastLogonNo, CTX_USERLIST); - RegisterNamespace("USERLIST:NLOGONS", 0, 0, tmplput_USERLIST_nLogons, CTX_USERLIST); - RegisterNamespace("USERLIST:NPOSTS", 0, 0, tmplput_USERLIST_nPosts, CTX_USERLIST); + WebcitAddUrlHandler(HKEY("select_user_to_edit"), "", 0, _select_user_to_edit, 0); + WebcitAddUrlHandler(HKEY("display_edituser"), "", 0, _display_edituser, 0); + WebcitAddUrlHandler(HKEY("edituser"), "", 0, edituser, 0); + WebcitAddUrlHandler(HKEY("create_user"), "", 0, create_user, 0); + + RegisterNamespace("USERLIST:USERNAME", 0, 1, tmplput_USERLIST_UserName, NULL, CTX_USERLIST); + RegisterNamespace("USERLIST:PASSWD", 0, 1, tmplput_USERLIST_Password, NULL, CTX_USERLIST); + RegisterNamespace("USERLIST:ACCLVLNO", 0, 0, tmplput_USERLIST_AccessLevelNo, NULL, CTX_USERLIST); + RegisterNamespace("USERLIST:ACCLVLSTR", 0, 0, tmplput_USERLIST_AccessLevelStr, NULL, CTX_USERLIST); + RegisterNamespace("USERLIST:UID", 0, 0, tmplput_USERLIST_UID, NULL, CTX_USERLIST); + RegisterNamespace("USERLIST:LASTLOGON:STR", 0, 0, tmplput_USERLIST_LastLogonStr, NULL, CTX_USERLIST); + RegisterNamespace("USERLIST:LASTLOGON:NO", 0, 0, tmplput_USERLIST_LastLogonNo, NULL, CTX_USERLIST); + RegisterNamespace("USERLIST:NLOGONS", 0, 0, tmplput_USERLIST_nLogons, NULL, CTX_USERLIST); + RegisterNamespace("USERLIST:NPOSTS", 0, 0, tmplput_USERLIST_nPosts, NULL, CTX_USERLIST); - RegisterNamespace("USERLIST:FLAGS", 0, 0, tmplput_USERLIST_Flags, CTX_USERLIST); - RegisterNamespace("USERLIST:DAYSTILLPURGE", 0, 0, tmplput_USERLIST_DaysTillPurge, CTX_USERLIST); + RegisterNamespace("USERLIST:FLAGS", 0, 0, tmplput_USERLIST_Flags, NULL, CTX_USERLIST); + RegisterNamespace("USERLIST:DAYSTILLPURGE", 0, 0, tmplput_USERLIST_DaysTillPurge, NULL, CTX_USERLIST); RegisterConditional(HKEY("COND:USERNAME"), 0, ConditionalUser, CTX_USERLIST); RegisterConditional(HKEY("COND:USERACCESS"), 0, ConditionalUserAccess, CTX_USERLIST);