当前位置:  技术问答>linux和unix

请教chown的实现和原理

    来源: 互联网  发布时间:2016-12-09

    本文导语:  现在在做一个路由器上访问USB的功能,碰到用户权限问题。 路由器里面只有chmod命令,chown命令都不全。 现在想参考下chown的实现,自己搞一个函数。 google和百度了一下,没有找到合适的源码,就下载了busybox源码下...

现在在做一个路由器上访问USB的功能,碰到用户权限问题。
路由器里面只有chmod命令,chown命令都不全。
现在想参考下chown的实现,自己搞一个函数。
google和百度了一下,没有找到合适的源码,就下载了busybox源码下来看chown.c结果看不懂。
没有具体的问题,请各位尽量多告知点信息。
下面是busybox里面的源码:
static int FAST_FUNC fileAction(const char *fileName, struct stat *statbuf,
void *vparam, int depth UNUSED_PARAM)
{
#define param  (*(struct param_t*)vparam)
#define opt option_mask32
uid_t u = (param.ugid.uid == (uid_t)-1L) ? statbuf->st_uid : param.ugid.uid;
gid_t g = (param.ugid.gid == (gid_t)-1L) ? statbuf->st_gid : param.ugid.gid;

if (param.chown_func(fileName, u, g) == 0) {
if (OPT_VERBOSE
 || (OPT_CHANGED && (statbuf->st_uid != u || statbuf->st_gid != g))
) {
printf("changed ownership of '%s' to %u:%un",
fileName, (unsigned)u, (unsigned)g);
}
return TRUE;
}
if (!OPT_QUIET)
bb_simple_perror_msg(fileName);
return FALSE;
#undef opt
#undef param
}

int chown_main(int argc UNUSED_PARAM, char **argv)
{
int retval = EXIT_SUCCESS;
int opt, flags;
struct param_t param;

/* Just -1 might not work: uid_t may be unsigned long */
param.ugid.uid = -1L;
param.ugid.gid = -1L;

#if ENABLE_FEATURE_CHOWN_LONG_OPTIONS
applet_long_options = chown_longopts;
#endif
opt_complementary = "-2";
opt = getopt32(argv, OPT_STR);
argv += optind;

/* This matches coreutils behavior (almost - see below) */
param.chown_func = chown;
if (OPT_NODEREF
    /* || (OPT_RECURSE && !OPT_TRAVERSE_TOP): */
    IF_DESKTOP( || (opt & (BIT_RECURSE|BIT_TRAVERSE_TOP)) == BIT_RECURSE)
) {
param.chown_func = lchown;
}

flags = ACTION_DEPTHFIRST; /* match coreutils order */
if (OPT_RECURSE)
flags |= ACTION_RECURSE;
if (OPT_TRAVERSE_TOP)
flags |= ACTION_FOLLOWLINKS_L0; /* -H/-L: follow links on depth 0 */
if (OPT_TRAVERSE)
flags |= ACTION_FOLLOWLINKS; /* follow links if -L */

parse_chown_usergroup_or_die(¶m.ugid, argv[0]);

/* Ok, ready to do the deed now */
while (*++argv) {
if (!recursive_action(*argv,
flags,          /* flags */
fileAction,     /* file action */
fileAction,     /* dir action */
¶m,         /* user data */
0)              /* depth */
) {
retval = EXIT_FAILURE;
}
}

return retval;
}

|

學習了,看來是更簡便的解決方法。
樓主慷慨,大家來接分啊~

|
呵呵
smb.conf中加入veto files 过滤文件。
[public]
  veto files =  

    
 
 

您可能感兴趣的文章:

  • 请教路由器原理
  • 请教包过滤c实现原理细节
  • 请教锁文件到底是怎么回事?它是什么原理?怎么工作的?多谢!
  • 请教:谁有关于Xwindow工作原理的资料
  • 请教Servfox和Spcaview的原理
  • 请教用javamail群发邮件的原理。
  • 请教RTP的意义和目的是什么,还有其实现原理!
  • *****高分请教基于WEB的自动点歌系统的实现原理*******
  • 真正请教:Serializable接口有哪些主要作用,为什么它与Socket类可实现邮件发送?在概念或原理上是如何实现的呢?
  • 请教dos启动原理??
  • 谁用Ias成功实现过ejb呢,我成了!!可是我想实现分布式时却失败了,请教!
  • 请教在soket中怎样实现断点续传?
  • 请教java中如何实现vb中chr() ,asc() 类似的功能?
  • 请教gcc编程 问题 关于调用中断 实现 图形模式
  • 请教,怎样实现IIS和resin 整合?
  • 请教如何用b shell/awk实现汇总
  • 请教:关于如何实现文件监控的问题
  • 请教一下:在UNIX下怎样实现和Windows下“计划任务”一样的功能。
  • 请教:两服务器之间的HTTP请求(非RMI实现)
  • sh 脚本:请教实现非root退出
  • 请教高手, 如何用expect实现BBS的自动登陆?
  • 请教有没有谁在 LINUX下实现对DVD光盘采用UDF格式刻录的?
  • 问题太难,请教高手,关于raid1功能的错误检测的实现
  • 请教高手:Unix下如何实现进程池?
  • 请教:在JavaScript中怎样实现网页的《后退》功能?
  • 请教:怎样实现分区自动挂接?
  • 请教linux下面的--help功能如何实现???
  • 请教使用openobex库实现蓝牙传输的问题
  • 请教:Linux下的时间比较,编程怎么实现?
  • 请教大家:有关阻塞模式的实现
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 请教,请教,这个问题是为什么????
  • 请教本地硬盘安装问题请教本地硬盘安装问题
  • ■请教■请教redhat最基本的问题!
  • 请教一个 shell 问题,我用下面这个 shell 语句总是失败,请教
  • 高分请教,各位大侠,请教一个问题,理论高手请进??谢谢
  • 请教Linux下pgadmin3-1.0.2的编译和安装!!高分请教!
  • 各位大虾,请教装了REDHAT9操作系统后,启动时无法引导到LINUX,请教该如何解决啊
  • 请教,请教,,,一定要看!!一定要看!!
  • 请教高手,小弟打印width=1500,height=600(A3纸)的Applet,在预览中是该区域是黑的,打印出来也是黑的,请教高手解决一下
  • :请教高手,小弟打印width=1500,height=600(A3纸)的Applet,在预览中是该区域是黑的,打印出来也是黑的,请教高手解决一下
  • 请教象我这样的硬盘应如何安装Linux,我昨天试装了,但有问题。(老问题了,也看了前面的帖子,但还是来请教,请多指教)
  • 请教这种循环的执行过程
  • .net/c#/asp.net iis7站长之家
  • 请教如何在指定目录下查找包含指定文字的文件
  • 请教局域网中如何通过ip地址得到主机名
  • 请教kdevelop的问题
  • 请教linux 下的adsl拨号问题.
  • 请教,如何用虚拟订机安装liux
  • 【请教】LINUX 下SNMP的MIB开发
  • 请教一个opengl的问题


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3