[关闭]
@tony-yin 2018-10-10T15:46:33.000000Z 字数 1621 阅读 764

FTP 修改及删除逻辑

C15000


逻辑简介

FTP服务分为匿名用户和普通用户两种,一个节点上匿名用户最多只能存在一个,而普通用户是可以存在多个的;C15000项目中的FTP服务,可以是一个匿名用户,也可以是一个或者多个普通用户,又或者是匿名用户和普通用户都存在;

对一个FTP服务进行修改时,必须保证最少要存在一个用户;

删除只存在匿名用户的FTP服务时,页面可以直接选中删除,后端对应的逻辑就是先删除服务,再删除匿名用户;而删除一个普通用户的FTP服务时,则不能直接删除服务和用户,必须先要修改服务,将普通用户修改成匿名用户才能删除,对应的后端逻辑为先删除所有普通用户,再创建一个匿名用户,然后删除服务,最后再删除匿名用户。(为什么这么设计这里就不多说了)

具体场景:

  1. ucsmftpadm ftp del -a /ftp1
  1. ucsmftpadm ftp del -u storageuser /ftp1
  1. # 删除服务
  2. ucsmftpadm ftp del /ftp1
  3. # 删除匿名用户
  4. ucsmftpadm ftp del -a /ftp1
  1. # 删除普通用户
  2. ucsmftpadm ftp del -u storageuser /ftp1
  3. # 添加匿名用户
  4. ucsmftpadm ftp add -a -p pool1 /ftp1
  5. # 删除ftp服务
  6. ucsmftpadm ftp del /ftp1
  7. # 删除匿名用户
  8. ucsmftpadm ftp del -a /ftp1
  1. # 删除普通用户
  2. ucsmftpadm ftp del -u storageuser /ftp1
  3. # 删除ftp服务
  4. ucsmftpadm ftp del /ftp1
  5. # 删除匿名用户
  6. ucsmftpadm ftp del -a /ftp1

Issue C15000-784

【问题原因】

FTP服务正常的删除逻辑是:

但是,当FTP服务创建失败时,不管是匿名用户还是正常用户,都可以直接点击删除按钮,这时后端只会调用一个接口:删除服务,这样并不会做删除用户的相关操作,则会导致下次创建时用户信息已存在,创建失败。

【解决方案】

在每次调用直接删除服务的接口中,判断该服务是否还存在对应的用户,如果存在则默认是创建失败的删除,这时候会先调用先删除用户的接口,然后再删除服务。

也就是每次如果hostagent层收到的请求是ucsmftpadm ftp del xxx时,都会根据/etc/hostagent/service.conf文件检查该服务是否有用户存在,有用户就先删除所有用户,再删除服务。因为删除整个服务只有两种情况,一种是正常的匿名用户删除,一种是存在普通用户或匿名用户的创建失败的服务删除,这样实现便可以兼顾这两种情况,只不过原来正常匿名用户服务删除的删除匿名用户操作,提前到删除服务那一环节了(其实这是有问题的,下个issue会提到)。

Issue C15000-890

【问题原因】

修改Issue C15000-784导致,为了保证对创建失败的ftp服务进行彻底删除,在每次后端收到删除服务时做用户校验,如果存在用户,则判定为删除失败的服务。但是存在场景不删除服务,只删除匿名用户,添加普通用户,这时候只会调用删除匿名用户的接口,而该接口由于之前的改动已经不会做实际删除工作,导致匿名用户目录并没有真正删除,下次创建匿名用户后由于存在匿名用户目录而创建失败。

【解决方案】

在原来的删除匿名用户接口下,再次进行判断,如果/etc/hostagent/service.conf存在匿名用户相关字段时,判定为删除匿名用户而非删除整个服务,调用删除匿名用户函数即可

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注