荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: jjksam (静!), 信区: InstallBBS
标  题: 自己写了一个postnews.c(转寄)[转载]
发信站: 荔园晨风BBS站 (Fri Apr 26 11:41:59 2002), 转信

【 以下文字转载自 jjksam 的信箱 】
【 原文由 jjksam@bbs.edu.cn 所发表 】
发信人: turbozv (_(^oo^)_), 信区: BBSMan_Dev
标  题: 自己写了一个postnews.c
发信站: BBS 水木清华站 (Thu Apr 25 20:53:44 2002)

/*
 *              postnew.c
 *
 *      post article from bbs to newsserver
 *
 *   by ZV 2002.4.24
 *
 * 说明:现在似乎很流行news<->bbs
 *      innbbsd确实很强大,我也写了一个程序直接提交发表
 * 在BBS某个版上的文章,用news.cn99.com测试了一下子,效果
 * 比较理想。
 *
 *
 * TODO: 时间函数老是用不来,哪位改改吧,谢谢了.
 *
 *
 */
#include "/root/bbssrc/include/bbs.h"


/* iconf 的格式: 转信站地址     对方转信版面    本地转入版面 */
char *iconf[]={
        "news.cn99.com cn.bbs.admin.test cnTest",
    "news.cn99.com cn.bbs.admin cnAdmin",
        NULL
};


/* 转信黑名单: 不转出这些人的文章 */
char *black_user[]={
        "deliver",
        "anonymous",
        "guest",
        "SYSOP",
        "",
        NULL
};

int valid_user(char *user) {
        int i;
        for(i=0; black_user[i]!=NULL; i++)
                if(!strcasecmp(user, black_user[i])) return 0;
        return 1;
}

int post_to_news(char *filename, char *board, char *author)
{
        int fd;
        int i, i2;
        struct sockaddr_in xs;
        struct hostent *he;
        char host[80], oboard[80], iboard[80];
        char reply[200], subject[200];
        char content[100000], buf[100000];
        int filesize;
        FILE *fp;
/*      time_t now = time(0);
        char strnow[100];
        sprintf(strnow, "%s", ctime(&now));
        strnow[strlen(strnow)-1] = 0;*/

        for(i=0; iconf[i]!=0; i++) {
                sscanf(iconf[i], "%s %s %s", host, oboard, iboard);
                if (strcmp(iboard, board) == 0) // equal
                        break;
        }

        if (strcmp(iboard, board) != 0)  // 不用转信
                return -1;

        bzero(reply, sizeof(reply));
        bzero((char*) &xs, sizeof(xs));
        xs.sin_family=AF_INET;
        if((he=gethostbyname(host))!=NULL)
                bcopy(he->h_addr, (char*) &xs.sin_addr, he->h_length);
        else
                xs.sin_addr.s_addr=inet_addr(host);
        xs.sin_port=htons(119);
        fd=socket(AF_INET, SOCK_STREAM, 0);
        if(connect(fd, (struct sockaddr*) &xs, sizeof(xs))<0) {
                perror("can't conenct ");
                return -1;
        }

        recvfrom(fd, reply, 200, 0, NULL, 0);
//      printf("->%s", reply);
        strcpy(reply, "post\n");
        sendto(fd, reply, strlen(reply), 0, NULL, 0);
//      printf("<-%s", reply);

        recvfrom(fd, reply, 200, 0, NULL, 0);
//      printf("->%s", reply);

        if ((reply[0] == '3') && (reply[1] == '4') && (reply[2] == '0')) {
                if ((fp=fopen(filename, "r")) == NULL) {
//                      perror("post file open error...");
                        return -1;
                }
                fseek(fp, 0, SEEK_END);
                filesize = ftell(fp);
                rewind(fp);

                if (fread(content, filesize, 1, fp) != 1) {
//                      perror("read error");
                        fclose(fp);
                        return -1;
                }
                fclose(fp);

                for (i=0; content[i]!='\n'; i++);
                for (i++; content[i]!=':'; i++);
                for (i+=2, i2=0; content[i]!='\n'; i++)
                        subject[i2++] = content[i];
                subject[i2] = 0;

                for (i++; content[i]!='\n'; i++)
                i++;

                sprintf(buf,
                                "From: 一网情深 <%s.bbs@bbs.uestc.edu.cn>\n"
                                "Newsgroups: %s\n"
                                "Subject: %s\n"
                                "Date: Mon, 22 Apr 2002 13:37:06 -0800\n"
                                "Lines: 3\n"
                                "X-Priority: 3\n"
                                "X-MSMail-Priority: Normal\n"
                                "X-Newsreader:  一网深情(bbs.uestc.edu.cn)
deliver V1.01\n"
                                "X-MimeOLE: Produced By ZV 2002.4.24\n\n"
                                "%s\n"
                                ".\n",
                                author, /*strnow,*/ oboard,     subject,
&content[i]);
                sendto(fd, buf, strlen(buf), 0, NULL, 0);
//              printf("%s", buf);

                recvfrom(fd, reply, 200, 0, NULL, 0);
/*              perror(reply);
                if (reply[0]==2) perror("post ok.");
                else perror("post error.");*/

        } else {
//              perror("post error...");
                return -1;
        }
        return -1;
}

int main(int argc, char **argv)
{
//      post_to_news("/home/ftp/bbs/boards/sysop/M.1019546291.A",
"TestWatering", "TurboZV");
        if (argc != 4)
//              perror("postnews call error");
                return -1;
        else {
                if (!valid_user(argv[3])) return -1;
                if(fork()) exit(0);
                post_to_news(argv[1], argv[2], argv[3]);
        }
}

--

※ 来源:·BBS 水木清华站 bbs.edu.cn·[FROM: 202.115.22.145]
--
※ 转载:·荔园晨风BBS站 bbs.szu.edu.cn·[FROM: 192.168.0.146]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店