-
-void do_pre555_usersupp_upgrade(void) {
- struct pre555usersupp usbuf;
- struct usersupp newus;
- struct cdbdata *cdbus;
- char tempfilename[PATH_MAX];
- FILE *fp, *tp;
- static char vcard[1024];
-
- lprintf(5, "Upgrading user file\n");
- fp = tmpfile();
- if (fp == NULL) {
- lprintf(1, "%s\n", strerror(errno));
- exit(errno);
- }
- strcpy(tempfilename, tmpnam(NULL));
-
- /* First, back out all old version records to a flat file */
- cdb_rewind(CDB_USERSUPP);
- while(cdbus = cdb_next_item(CDB_USERSUPP), cdbus != NULL) {
- memset(&usbuf, 0, sizeof(struct pre555usersupp));
- memcpy(&usbuf, cdbus->ptr,
- ( (cdbus->len > sizeof(struct pre555usersupp)) ?
- sizeof(struct pre555usersupp) : cdbus->len) );
- cdb_free(cdbus);
- fwrite(&usbuf, sizeof(struct pre555usersupp), 1, fp);
- }
-
- /* ...and overwrite the records with new format records */
- rewind(fp);
- while (fread(&usbuf, sizeof(struct pre555usersupp), 1, fp) > 0) {
- if (strlen(usbuf.fullname) > 0) {
- lprintf(9, "Upgrading <%s>\n", usbuf.fullname);
- memset(&newus, 0, sizeof(struct usersupp));
-
- newus.uid = usbuf.USuid;
- strcpy(newus.password, usbuf.password);
- newus.flags = usbuf.flags;
- newus.timescalled = (long) usbuf.timescalled;
- newus.posted = (long) usbuf.posted;
- newus.axlevel = (CIT_UBYTE) usbuf.axlevel;
- newus.usernum = (long) usbuf.usernum;
- newus.lastcall = (long) usbuf.lastcall;
- newus.USuserpurge = (int) usbuf.USuserpurge;
- strcpy(newus.fullname, usbuf.fullname);
- newus.USscreenwidth = (CIT_UBYTE) usbuf.USscreenwidth;
- newus.USscreenheight = (CIT_UBYTE) usbuf.USscreenheight;
-
- putuser(&newus);
-
- /* write the vcard */
- snprintf(vcard, sizeof vcard,
- "Content-type: text/x-vcard\n\n"
- "begin:vcard\n"
- "n:%s\n"
- "tel;home:%s\n"
- "email;internet:%s\n"
- "adr:;;%s;%s;%s;%s;USA\n"
- "end:vcard\n",
- usbuf.USname,
- usbuf.USphone,
- usbuf.USemail,
- usbuf.USaddr,
- usbuf.UScity,
- usbuf.USstate,
- usbuf.USzip);
-
- tp = fopen(tempfilename, "w");
- fwrite(vcard, strlen(vcard)+1, 1, tp);
- fclose(tp);
-
- CtdlWriteObject(USERCONFIGROOM, "text/x-vcard",
- tempfilename, &newus, 0, 1, CM_SKIP_HOOKS);
- unlink(tempfilename);
- }
- }
-
- fclose(fp); /* this file deletes automatically */
-}
-
-
-
-
-