2006年09月11日

发信人: mutecat ((I love Linux)), 信区: Linux
标  题: [原创]pserver认证方式配置CVS服务器(4)
发信站: 武汉白云黄鹤站 (2006年07月05日09:38:32 星期三), 站内信件

   ok,服务器端都配置好了.

   最后确认一下cvspserver是否已经启动,cvs是否已经初始化好.

   下面登陆cvs服务器试试.

   在Linux客户端可以使用下面的命令登陆:

   cvs -d :pserver:mutecat@218.199.20.98:/CVS login

   在windows客户端使用软件wincvs登陆,命令与上面的一样.

    参考资料1:

    CVS–并行版本系统 v1.11.4: 手册

        http://www.soforge.com/cvsdoc/zh_CN-1_11_4/book1.html

 

 


     mutecat 加油!!
     我爱我的姐姐!
 健康乐观、积极向上的生活!
欢迎访问我的blog  http://blog.donews.com/mutecat

发信人: mutecat ((I love Linux)), 信区: Linux
标  题: [原创]pserver认证方式配置CVS服务器(3)
发信站: 武汉白云黄鹤站 (2006年07月05日09:34:17 星期三), 站内信件

    pserver方式客户端使用明文传输,所以CVS使用了一个独立的CVS密码文件,来保证
用户连接源码库的时候不会危及定期密码的安全。这个独立的密码文件就是上面提到的
passwd文件.

    passwd文件里面的密码字段使用crypt函数加密,可惜的是目前为止passwd文件只能
通过其它方式拷贝,cvs并没有配备相应的命令生成它.

    我使用htpasswd这个命令生成它的

    $cd  /CVS/CVSROOT
    $htpasswd  passwd  mutecat

    则会在当前目录下生成文件passwd,内容类似下面:

    mutecat:zN123SKbsadCKI

    和前面的相比少了一个本地用户,再后面加上系统用户即可.

    修改后的passwd文件如下:

    mutecat:zN123SKbsadCKI:cvsroot

    共享一个系统用户的好处是便于安排源码库中的权限。

    cvs的权限是通过/CVS/CVSROOT/readers 和writers这两个文件控制的.

    下面摘自参考资料1

    为一位用户指定只读访问(权限),这里有两种方式:依靠“包含”和依靠“排除”

   “包含”意思是在/CVS/CVSROOT/readers内列出特定的使用者的名字。这个文件是一

个以简单换行符分隔的用户列表。这里有一个简单的readers文件:

    mutecat

    wiki

    (不要忘记在最后一个使用者之后的换行符。)

   “排除”意指显示列出有写入访问权限的每一位用户。如果文件

    /CVS/CVSROOT/writers

    存在,那么只有列入该文件内的用户有写入权限,而没有列入其内的其他人只有读

取权限(当然,即使只读权限的用户仍需被列在CVS passwd文件之内)。writers文件与

readers文件有相同的格式。

    注意:如果你的CVS passwd文件将CVS用户映射到系统用户,你要确信拒绝或允许

使用cvs用户名而不是系统用户名来进行只读访问。也就是说,readers和writers文件包

含有CVS用户名,这些用户名可以与系统用户名一致或不一致。

这里有一个关于服务器在决定是否允许只读或只写访问行为的完整描述。

如果readers文件存在,并且这个用户名被列在内,那么她会获得只读访问权限。如果w

riters存在,并且用户没有被列入其中,那么她也只能获得只读访问权限(这是正确的

,即使readers存在但用户没有被加入其中)。否则,她将获取完全读写访问权限。

当然,如果两个文件同时记录了同一个用户,这样会发生冲突。这种情况可以通过较为

保守的方式解决。此用户会获得只读访问权限。这样做会更有利于保护存储仓。

 


     mutecat 加油!!
     我爱我的姐姐!
 健康乐观、积极向上的生活!
欢迎访问我的blog  http://blog.donews.com/mutecat

发信人: mutecat ((I love Linux)), 信区: Linux
标  题: [原创]pserver认证方式配置CVS服务器(2)
发信站: 武汉白云黄鹤站 (2006年07月05日08:38:12 星期三), 站内信件

    前面已经成功启动了cvspserver,要登陆cvs服务器我们肯定需要cvs的用户帐号,

cvspserver是通过cvs根目录下的CVSROOT/passwd文件来管理登陆用户的.从前面的

/etc/xinetd.d/cvspserver文件里可以看出我的cvs根目录位于/CVS节点处.

    使用命令cvs -d /CVS init初始化cvs服务,此命令还会自动生成/CVS目录并在其

子目录建立CVSROOT文件夹.

    默认情况下/CVS/CVSROOT目录下面是没有passwd文件的,passwd文件的格式如下:

    cvs用户名:密码:系统用户

    由此可以知道cvs用户是映射到本地的系统用户的,因此一个系统用户可以对应n个
不同的cvs用户.为了便于管理,一般情况下单独为所有cvs用户建立一个独立的系统用户.

密码和系统用户也可以不要(配置匿名用户登陆和系统用户登陆)

    #group add cvs  (建立cvs组)
    #useradd -g cvs -d /CVS  cvsroot (建立cvsroot用户,根目录位于/CVS节点处)
    #passwd cvsroot
    #chown -R cvsroot.cvs  /CVS

    接下来的问题是如何创建passwd文件?

 


     mutecat 加油!!
     我爱我的姐姐!
 健康乐观、积极向上的生活!
欢迎访问我的blog  http://blog.donews.com/mutecat

发信人: mutecat ((I love Linux)), 信区: Linux
标  题: [原创]pserver认证方式配置CVS服务器(1)
发信站: 武汉白云黄鹤站 (2006年07月05日08:24:47 星期三), 站内信件

2006.7.5 by mutecat@byhh

题记:

    很久以前以ssh认证方式配置过cvs服务器,windows客户端使用wincvs登陆,以ssh方
式登陆cvs服务器的最大的好处就是安全性高,但是ssh认证方式涉及到公钥和密钥的生
成和保管以及putty的设置,对于cvs的用户而言显得有些麻烦.因此昨天又以pserver的
方式重新配置了cvs服务器,今天把过程记录于此,与大家共勉,也方便自己以后参考^_^.

操作环境: OS/RedHat 9.  cvs  vsrsion/1.11.2

    对于cvs是干吗的?如何安装cvs?pserver是什么?  你读这篇文章之前应该知道这些.

    以pserver方式启动cvs服务器,首先要开放cvspserver这个服务,cvspserver是一个

标准服务,不出意外,在/etc/services文件里面应该能找到这两行.

    cvspserver  2401/tcp #CVS client/server operations
    cvspserver  2401/udp #CVS client/server operations

    不难看出cvspserver使用标准的端口号2401.

    到底如何启动cvspserver服务呢?

    一般采用的方式是从xinetd启动,对于从xinetd启动的服务在/etc/xinetd.d目录

下都会有一个配置文件(也许更准确的说应该是启动文件),对于cvspserver服务文件名

就该是cvspserver,文件的内容如下:
        #default:on
        #description:
        #            cvspserver for cvs server to authorize cvs users
        service cvspserver
        {
            disable = no
            flags = REUSE
            socket_type = stream
            wait = no
            user = root
            server = /usr/bin/cvs
            server_args = -f –allow-root=/CVS pserver
            log_on_success += USERID
            log_on_failure += USERID
        }

        注意: 对于每个参数的=号左右两边都要至少有一个空格,否则cvspserver不能

正常启动,这个问题让我郁闷了一段时间的^_^.这就是规则,你必须遵守!各个参数的含义

我就不多说了,网上多的是.

    配置好以后我们就可以启动cvspserver了

    $service xinetd restart

    检查一下cvspserver是否正常启动.

    $netstat -a|grep cvs
    tcp     0       0   *:cvspserver  *    * LISTEN

    如果有类似于上面的输出说明cvspserver已经正常启动了!

     mutecat 加油!!
     我爱我的姐姐!
 健康乐观、积极向上的生活!
欢迎访问我的blog  http://blog.donews.com/mutecat

发信人: wangchun (luckydog<->mutecat), 信区: DianLinux
标  题: FB2002置底功能实现手记(8)
发信站: 喻信星空 (2006年04月18日21:08:32 星期二), 站内信件

    最后需要考虑一些细节问题,譬如置底的文章不能被直接删除,也不能直接被修改

标题等. 还有就是统计置底的文章数的问题,需要修改函数get_num_records    和

get_records  以及subtitute_record, 我是copy  cheyo@JMU代码,然后作少量修改.

1.置底文章不能被随便删除.

-> 在del_post函数中:

  找到这几行代码
 if (!SR_BMDELFLAG) {
      sprintf(genbuf, "删除文章 [%-.55s]", fileinfo->title);
      if (askyn(genbuf, NA, YEA) == NA) {
         move(t_lines – 1, 0);
     prints("放弃删除文章…");
     clrtoeol();
     egetch();
     return PARTUPDATE;
      }
   之后,加入:

  // add by mutecat@byhh
  if(fileinfo->accessed[1] & FILE_TOP){
          prints("\n\033[1;33m置底文章,无法删除. 请先取消置底.\033[m");
          clrtoeol();
          egetch();
          return PARTUPDATE;
  }
  // end

2. 置底文章标题不可修改

  src/bbs.h 中

-> 在edit_title函数中增加:

  /*added  by  mutecat@byhh  */
  struct stat st;
  if(stat(direct,&st)==-1 || (st.st_size/sizeof(struct fileheader) < ent))
      return DONOTHING;
  /*  作用是:文章置低后,不能改标题,但可以更来原文章标题.*/

3. 修改统计置底文章函数(也统计被g的文章函数)

 在src/record.c中:

-> 函数get_num_records中:

   if (stat(filename, &st) == -1)

                return 0;

   之后加入:

   if( strlen(filename)>=strlen(TOPFILE_DIR) &&

               !strcmp(filename+strlen(filename)-strlen(TOPFILE_DIR),TO
PFILE_DIR) ) {

                return st.st_size/size;

   }                               // add by mutecat@byhh copyed from cheyu
   // 上面这一句,返回当前版面已设置置底的文章.

 

   再加入:

 

   //add by mutecat@byhh copyed from hace

   char *s,buf[64];

   int num=st.st_size;

   strcpy(buf,filename);

   s=strrchr(buf,’/')+1;

   strcpy(s,".TOPFILE");

   if(stat(buf,&st)==-1)

      return num/size;

  else

      return (num+st.st_size)/size;

  //end

  注销这一行:
  //return (st.st_size / size);

-> 函数get_records中(注意:这里是get_records不是get_record):

   return (n / size); 这一行之前,加入:

   //add by  mutecat@byhh  2006-4.17  cpoyed from  hace

if(n<number*size){

    char *s,buf[64];

    struct stat st;

    strcpy(buf,filename);

    s=strrchr(buf,’/')+1;

    strcpy(s,".TOPFILE");

    if((stat(buf,&st)!=-1) && st.st_size>0){

        fd=open(buf,O_RDONLY,0); //没有作错误检查

        while(read(fd,&rptr[n],size)){

            n+=size;

            if(n>=number*size)break;

        }

        close(fd);

    }

}

  //end

-> 函数substitute_record中:

 /* add by mutecat  copyed from hace  */

  struct stat st;

  if(stat(filename,&st)==-1)

      return -1;

  else{

      if(st.st_size/size <id)

                  return -1;

  }

//end


~
~
~
~
~
~
※ 修改:·wangchun 於 04月18日21:09:24 修改本文·[FROM: 222.20.73.221]
※ 来源:·喻信星空 bbs.eistar.net·[FROM: 222.20.73.221]

发信人: wangchun (luckydog<->mutecat), 信区: DianLinux
标  题: FB2002置底功能实现手记(7)
发信站: 喻信星空 (2006年04月18日20:44:03 星期二), 站内信件

   下面就是在readdoent主题列表函数里面添加置底文章的显示格式.直接拷贝的

hace的代码,并做少量修改,添加的模块如下(在noreply=0前增加):

   char path[64];
   struct stat st;
   char msg[17];
   setbdir(path,currboard);
  if( (stat(path,&st) == -1) ){
    printf("error\n");
  }
  if( (stat(path,&st )!= -1) && (st.st_size/sizeof(struct fileheader)) < num
){
    ent->accessed[1] |=  FILE_TOP;
    ent->accessed[0] |=  FILE_NOREPLY;
    if( (ent->accessed[0] & FILE_MARKED) && (ent->accessed[0] &
FILE_DIGEST) )
    strcpy(msg,"\033[精华]\033");
    else if(ent->accessed[0] & FILE_DIGEST)
    strcpy(msg,"\033[提示]\033");
    else if(ent->accessed[0] & FILE_MARKED)
    strcpy(msg,"\033[推荐]\033");
    else
    strcpy(msg,"\033[注意]\033");
    msg[17]=0;
    sprintf(buf, " %-6s  %-12.12s %s%6.6s %s◆ %-.45s ",msg,
     ent->owner, color, date, " ",TITLE);
}

     mutecat 加油!!
     喜欢是浅浅的爱,爱是深深的喜欢
 健康乐观、积极向上的生活!
欢迎访问我的blog  http://blog.donews.com/mutecat
~
※ 修改:·wangchun 於 04月18日20:44:33 修改本文·[FROM: 222.20.73.221]
※ 来源:·喻信星空 bbs.eistar.net·[FROM: 222.20.73.221]

发信人: wangchun (luckydog<->mutecat), 信区: DianLinux
标  题: FB2002置底功能实现手记(6)
发信站: 喻信星空 (2006年04月18日20:37:51 星期二), 站内信件

    被置底的文章再被按’#'键后,topfile_post函数将会检测到此文章已被FILE_TOP,

所以执行dele_top取消置底.此函数也是直接拷贝dele_digest,并做适当修改.修改后

的函数如下:

int
dele_top(tname, direc)
char   *dname;
char   *direc;
{
    char    top_name[STRLEN];
    char    new_dir[STRLEN];
    char    buf[STRLEN];
    char   *ptr;
    struct fileheader fh;
    int     pos;
    strncpy(top_name, tname,STRLEN);
    strcpy(new_dir, direc);
    digest_name[0] = ‘T’;  //文件标志,表明此文章是置底文章
    ptr = strrchr(new_dir, ‘/’) + 1;
    strcpy(ptr, TOPFILE_DIR);
    strncpy(buf, currfile,STRLEN);
    strncpy(currfile, top_name,STRLEN);
    pos = search_record(new_dir, &fh, sizeof(fh), cmpdigestfilename,
top_name);
    if (pos <= 0) {
        return;
    }
    delete_file(new_dir, sizeof(struct fileheader), pos, cmpfilename);
    strncpy(currfile, buf,STRLEN);
    *ptr = ‘\0′;
    sprintf(buf, "%s%s", new_dir, top_name);
    unlink(buf);
    return;
}

     mutecat 加油!!
     喜欢是浅浅的爱,爱是深深的喜欢
 健康乐观、积极向上的生活!
欢迎访问我的blog  http://blog.donews.com/mutecat
~
※ 来源:·喻信星空 bbs.eistar.net·[FROM: 222.20.73.221]

发信人: wangchun (luckydog<->mutecat), 信区: DianLinux
标  题: FB2002置底功能实现手记(5)
发信站: 喻信星空 (2006年04月18日20:29:48 星期二), 站内信件

   bbs.c里面添加函数topfile_post,此函数是按’#'键执行的动作,直接拷贝

digest_post函数并做少量修改,修改后的函数如下.

   int
   topfile_post(ent, fhdr, direct)
   int     ent;
   struct fileheader *fhdr;
   char   *direct;
  {

    struct fileheader chkfileinfo; // add by quickmouse 01-05-30 检查一下 避
免出现.DIR破坏

   if (!chk_currBM(currBM)) {
     return DONOTHING;
    }      /*检查是否是斑斑,如果不是,什么也不做,因为你没权限 */

    if (digestmode == YEA)
        return DONOTHING;
      if(get_records(direct, &chkfileinfo, sizeof(chkfileinfo), ent, 1) !=
1)// add by quickmouse 01-05-30
      {
          return DONOTHING;
      }
      if( strcmp(fhdr->filename, chkfileinfo.filename) )// add by quickmous
e 01-05-30
      {
          return DONOTHING;
      }

      if (fhdr->accessed[1] & FILE_TOP) {

        fhdr->accessed[1] = (fhdr->accessed[1] & ~FILE_TOP);

        dele_digest_top(fhdr->filename,direct);

    } else {

        struct fileheader topfile;

        char *ptr,buf[64];

        memcpy(&topfile, fhdr, sizeof(topfile));

        topfile.filename[0] = ‘T’;

        strcpy(buf, direct);

        ptr = strrchr(buf, ‘/’) + 1;

        ptr[0] = ‘\0′;

        sprintf(genbuf, "%s%s", buf, topfile.filename);
/* 下面这一段检测加上去之后有问题,所以我先去掉 */
/*      if (dashf(genbuf)) {

            fhdr->accessed[0] = fhdr->accessed[0] | FILE_TOP;

            substitute_record(direct, fhdr, sizeof(*fhdr), ent);

        return PARTUPDATE;

        }

*/

        sprintf(&genbuf[512], "%s%s", buf, fhdr->filename);

        link(&genbuf[512], genbuf);

        strcpy(ptr, TOPFILE_DIR);

        if (get_num_records(buf, sizeof(topfile)) >= MAX_TOP) {

            move(3, 0);

            clrtobot();

            move(4, 10);

            prints("\t抱歉,你的置顶文章已经超过 %d 篇,无法再加入…\n",
MAX_TOP);
            pressanykey();
            return PARTUPDATE;
         }

        append_record(buf, &topfile, sizeof(topfile));

        fhdr->accessed[1] = fhdr->accessed[1] | FILE_TOP;

        fhdr->accessed[1] &= ~FILE_DELETED;

    }

    substitute_record(direct, fhdr, sizeof(*fhdr), ent);

    return PARTUPDATE;

}

     mutecat 加油!!
     喜欢是浅浅的爱,爱是深深的喜欢
 健康乐观、积极向上的生活!
欢迎访问我的blog  http://blog.donews.com/mutecat
~
※ 来源:·喻信星空 bbs.eistar.net·[FROM: 222.20.73.221]

发信人: wangchun (luckydog<->mutecat), 信区: DianLinux
标  题: FB2002置底功能实现手记(4)
发信站: 喻信星空 (2006年04月18日20:04:16 星期二), 站内信件

 

接下来增加一个快捷键#,这个应该是不难的,FB2002里面可以这样实现:

src/bbs.c

-> 在read_post函数中增加:

  case ‘#’:
      topfile_post(ent, fileinfo, direct);
      break;            /* 按#键时,执行topfile_post函数,文章置底mutecat@byhh
*/

-> 在struct one_key read_comms[] 中增加:

  {‘#’, topfile_post},   /* added by mutecat@byhh  */

下面是ytht系统的修改,大同小异吧?

:4. src/bbs.c 中:

:-> 在read_post函数中增加:

:  case ‘#’:
:      topfile_post(ent, fileinfo, direct);
:      break;               // 按#键时,执行topfile_post函数,cheyo注

:-> 在struct one_key read_comms[] 中增加:

:  {‘#’, topfile_post,"置底"},

 

 

     mutecat 加油!!
     喜欢是浅浅的爱,爱是深深的喜欢
 健康乐观、积极向上的生活!
欢迎访问我的blog  http://blog.donews.com/mutecat
~
※ 修改:·wangchun 於 04月18日21:12:50 修改本文·[FROM: 222.20.73.221]
※ 来源:·喻信星空 bbs.eistar.net·[FROM: 222.20.73.221]