refriend.c
上传用户:minyiyu
上传日期:2018-12-24
资源大小:864k
文件大小:5k
源码类别:

Telnet服务器

开发平台:

Unix_Linux

  1. /*
  2.  * refriend.c -- translate old friend record to Firebird 3.0
  3.  *    (purpose used for PH4,CCU and M series)
  4.  *
  5.  * A part of Firebird BBS 3.0 utility kit
  6.  *
  7.  * Copyright (c) 1999, Edward Ping-Da Chuang <edwardc@firebird.dhs.org>
  8.  * All rights reserved.
  9.  *
  10.  * Redistribution and use in source and binary forms, with or without
  11.  * modification, are permitted provided that the following conditions
  12.  * are met:
  13.  * 1. Redistributions of source code must retain the above copyright
  14.  *    notice, this list of conditions and the following disclaimer.
  15.  * 2. Redistributions in binary form must reproduce the above copyright
  16.  *    notice, this list of conditions and the following disclaimer in the
  17.  *    documentation and/or other materials provided with the distribution.
  18.  *
  19.  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
  20.  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  21.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  22.  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
  23.  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  24.  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  25.  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  26.  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  27.  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  28.  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  29.  * SUCH DAMAGE.
  30.  *
  31.  * CVS: $Id: refriend.c,v 1.1 2000/01/15 01:45:43 edwardc Exp $
  32.  */
  33. #include "bbs.h"
  34. struct oldfriend {
  35. char            id[13];
  36. char            exp[15];
  37. };
  38. struct newfriend {
  39. char            id[13];
  40. char            exp[40];
  41. };
  42. int
  43. report() { }
  44. int
  45. transfer(char *uid)
  46. {
  47. struct newfriend nf;
  48. char  *str, fname[80], dname[80], genbuf[128];
  49. FILE  *fp;
  50. memset(&nf, 0, sizeof(struct newfriend));
  51. sprintf(fname, "%s/home/%s/overrides", BBSHOME, uid);
  52. sprintf(dname, "%s/home/%s/friends", BBSHOME, uid);
  53. if ((fp = fopen(fname, "r")) == NULL) {
  54. return 0;
  55. }
  56. while (fgets(genbuf, 80, fp) != NULL) {
  57. if ((str = strtok(genbuf, " nrt")) != NULL) {
  58. memset(&nf, 0, sizeof(struct newfriend));
  59. sprintf(nf.id, "%.12s", str);
  60. str = strtok(NULL, " nrt");
  61. sprintf(nf.exp, "%.39s", (str == NULL) ? "" : str);
  62. append_record(dname, &nf, sizeof(nf));
  63. }
  64. }
  65. fclose(fp);
  66. chown(dname, (uid_t) BBSUID, (gid_t) BBSGID);
  67. unlink(fname);
  68. return 1;
  69. }
  70. int
  71. transfer2(char *uid)
  72. {
  73. struct oldfriend fh;
  74. struct newfriend nfh;
  75. char  fname[80], dname[80];
  76. FILE           *fp, *fp2;
  77. memset(&fh, 0, sizeof(struct oldfriend));
  78. memset(&nfh, 0, sizeof(struct newfriend));
  79. sprintf(fname, "%s/home/%c/%s/friends", BBSHOME, toupper(uid[0]), uid);
  80. sprintf(dname, "%s/home/%c/%s/friends.new", BBSHOME, toupper(uid[0]), uid);
  81. if ((fp = fopen(fname, "rb")) == NULL)
  82. return 0;
  83. if ((fp2 = fopen(dname, "wb")) == NULL)
  84. return 0;
  85. while (1) {
  86. if (fread(&fh, sizeof(fh), 1, fp) <= 0)
  87. break;
  88. memset(&nfh, 0, sizeof(struct newfriend));
  89. strcpy(nfh.id, fh.id);
  90. strcpy(nfh.exp, fh.exp);
  91. append_record(dname, &nfh, sizeof(nfh));
  92. }
  93. fclose(fp);
  94. fclose(fp2);
  95. if (chown(dname, (uid_t) BBSUID, (gid_t) BBSGID) != 0) {
  96. printf("nn cannot chown %s to %d:%dnn", dname, BBSUID, BBSGID);
  97. exit(2);
  98. }
  99. unlink(fname);
  100. if (rename(dname, fname) != 0) {
  101. printf("nn cannot rename %s to %s!!n", dname, fname);
  102. exit(3);
  103. }
  104. return 1;
  105. }
  106. int
  107. main()
  108. {
  109. FILE           *rec;
  110. int             i = 0, j = 0;
  111. struct userec   user;
  112. #ifdef PH4_CCU
  113. int             type = 1;
  114. #else
  115. int type = 0;
  116. #endif
  117. char genbuf[128];
  118. #ifdef USEINBBBSHOME
  119. sprintf(genbuf, "%s/.PASSWDS", BBSHOME);
  120. #else
  121. sprintf(genbuf, ".PASSWDS.new");
  122. #endif
  123. rec = fopen(genbuf, "rb");
  124. printf("Friends Records Transfering to FB 3.0. %s", 
  125. ( type == 1 ) ? "(Type 1)" : "Type 2");
  126. while (1) {
  127. if (fread(&user, sizeof(user), 1, rec) <= 0)
  128. break;
  129. if (user.numlogins <= 0)
  130. continue;
  131. #ifdef PH4_CCU
  132. if (transfer(user.userid) == 1)
  133. printf("%.12s Type 1 Transferredn", user.userid);
  134. else {
  135. printf("%.12s No overrides File...n", user.userid);
  136. j++;
  137. continue;
  138. }
  139. #else
  140. if (transfer2(user.userid) == 1)
  141. printf("%.12s Transferredn", user.userid);
  142. else {
  143. printf("%.12s No overrides File...n", user.userid);
  144. j++;
  145. continue;
  146. }
  147. #endif
  148. i++;
  149. }
  150. printf("n%d Friends Records Tranferred to Firebird BBS 3.0..%sn", i
  151. , (type == 1) ? "(Type 1)" : "(Type 2)" );
  152. printf("%d records haven't file to transfeer (ignored)n", j);
  153. fclose(rec);
  154. }