cap_file.c
上传用户:pycemail
上传日期:2007-01-04
资源大小:329k
文件大小:3k
源码类别:

Ftp客户端

开发平台:

Unix_Linux

  1. /*
  2.  * $Id: cap_file.c,v 1.1 1999/09/07 23:14:19 macgyver Exp $
  3.  *
  4.  * Copyright (c) 1997 Andrew G Morgan <morgan@linux.kernel.org>
  5.  *
  6.  * See end of file for Log.
  7.  *
  8.  * This file deals with setting capabilities on files.
  9.  */
  10. #include "libcap.h"
  11. /*
  12.  * Get the capabilities of an open file, as specified by its file
  13.  * descriptor.
  14.  */
  15. cap_t cap_get_fd(int fildes)
  16. {
  17.     cap_t result;
  18.     /* allocate a new capability set */
  19.     result = cap_init();
  20.     if (result) {
  21. _cap_debug("getting fildes capabilities");
  22. /* fill the capability sets via a system call */
  23. if (_fgetfilecap(fildes, sizeof(struct __cap_s),
  24.       &result->set[CAP_INHERITABLE],
  25.       &result->set[CAP_PERMITTED],
  26.       &result->set[CAP_EFFECTIVE] )) {
  27.     cap_free(&result);
  28. }
  29.     }
  30.     return result;
  31. }
  32. /*
  33.  * Set the capabilities on a named file.
  34.  */
  35. cap_t cap_get_file(const char *filename)
  36. {
  37.     cap_t result;
  38.     /* allocate a new capability set */
  39.     result = cap_init();
  40.     if (result) {
  41. _cap_debug("getting named file capabilities");
  42. /* fill the capability sets via a system call */
  43. if (_getfilecap(filename, sizeof(struct __cap_s),
  44.      &result->set[CAP_INHERITABLE],
  45.      &result->set[CAP_PERMITTED],
  46.      &result->set[CAP_EFFECTIVE] ))
  47.     cap_free(&result);
  48.     }
  49.     return result;
  50. }
  51. /*
  52.  * Set the capabilities of an open file, as specified by its file
  53.  * descriptor.
  54.  */
  55. int cap_set_fd(int fildes, cap_t cap_d)
  56. {
  57.     if (!good_cap_t(cap_d)) {
  58. errno = EINVAL;
  59. return -1;
  60.     }
  61.     _cap_debug("setting fildes capabilities");
  62.     return _fsetfilecap(fildes, sizeof(struct __cap_s),
  63.   &cap_d->set[CAP_INHERITABLE],
  64.   &cap_d->set[CAP_PERMITTED],
  65.   &cap_d->set[CAP_EFFECTIVE] );
  66. }
  67. /*
  68.  * Set the capabilities of a named file.
  69.  */
  70. int cap_set_file(const char *filename, cap_t cap_d)
  71. {
  72.     if (!good_cap_t(cap_d)) {
  73. errno = EINVAL;
  74. return -1;
  75.     }
  76.     _cap_debug("setting filename capabilities");
  77.     return _setfilecap(filename, sizeof(struct __cap_s),
  78.   &cap_d->set[CAP_INHERITABLE],
  79.   &cap_d->set[CAP_PERMITTED],
  80.   &cap_d->set[CAP_EFFECTIVE] );
  81. }
  82. /*
  83.  * $Log: cap_file.c,v $
  84.  * Revision 1.1  1999/09/07 23:14:19  macgyver
  85.  * Updated capabilities library and model.
  86.  *
  87.  * Revision 1.1.1.1  1999/04/17 22:16:31  morgan
  88.  * release 1.0 of libcap
  89.  *
  90.  * Revision 1.5  1998/05/24 22:54:09  morgan
  91.  * updated for 2.1.104
  92.  *
  93.  * Revision 1.4  1997/05/14 05:17:13  morgan
  94.  * bug-fix from zefram (errno no set on success)
  95.  *
  96.  * Revision 1.3  1997/05/04 05:35:46  morgan
  97.  * fixed errno setting. syscalls do this part
  98.  *
  99.  * Revision 1.2  1997/04/28 00:57:11  morgan
  100.  * fixes and zefram's patches
  101.  *
  102.  * Revision 1.1  1997/04/21 04:32:52  morgan
  103.  * Initial revision
  104.  *
  105.  */