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

Ftp客户端

开发平台:

Unix_Linux

  1. /*
  2.  * $Id: cap_proc.c,v 1.2 1999/09/07 23:14:19 macgyver Exp $
  3.  *
  4.  * Copyright (c) 1997-8 Andrew G Morgan <morgan@linux.kernel.org>
  5.  *
  6.  * See end of file for Log.
  7.  *
  8.  * This file deals with setting capabilities on processes.
  9.  */
  10. #include "libcap.h"
  11. cap_t cap_get_proc(void)
  12. {
  13.     cap_t result;
  14.     /* allocate a new capability set */
  15.     result = cap_init();
  16.     if (result) {
  17. _cap_debug("getting current process' capabilities");
  18. /* fill the capability sets via a system call */
  19. if (capget(&result->head, &result->set)) {
  20.     cap_free(&result);
  21. }
  22.     }
  23.     return result;
  24. }
  25. int cap_set_proc(cap_t cap_d)
  26. {
  27.     int retval;
  28.     if (!good_cap_t(cap_d)) {
  29. errno = EINVAL;
  30. return -1;
  31.     }
  32.     _cap_debug("setting process capabilities");
  33.     retval = capset(&cap_d->head, &cap_d->set);
  34.     cap_d->head.version = _LINUX_CAPABILITY_VERSION;
  35.     return retval;
  36. }
  37. /* the following two functions are not required by POSIX */
  38. /* read the caps on a specific process */
  39. int capgetp(pid_t pid, cap_t cap_d)
  40. {
  41.     int error;
  42.     if (!good_cap_t(cap_d)) {
  43. errno = EINVAL;
  44. return -1;
  45.     }
  46.     _cap_debug("getting process capabilities for proc %d", pid);
  47.     cap_d->head.pid = pid;
  48.     error = capget(&cap_d->head, &cap_d->set);
  49.     cap_d->head.version = _LINUX_CAPABILITY_VERSION;
  50.     cap_d->head.pid = 0;
  51.     return error;
  52. }
  53. /* set the caps on a specific process/pg etc.. */
  54. int capsetp(pid_t pid, cap_t cap_d)
  55. {
  56.     int error;
  57.     if (!good_cap_t(cap_d)) {
  58. errno = EINVAL;
  59. return -1;
  60.     }
  61.     _cap_debug("setting process capabilities for proc %d", pid);
  62.     cap_d->head.pid = pid;
  63.     error = capset(&cap_d->head, &cap_d->set);
  64.     cap_d->head.version = _LINUX_CAPABILITY_VERSION;
  65.     cap_d->head.pid = 0;
  66.     return error;
  67. }
  68. /*
  69.  * $Log: cap_proc.c,v $
  70.  * Revision 1.2  1999/09/07 23:14:19  macgyver
  71.  * Updated capabilities library and model.
  72.  *
  73.  * Revision 1.2  1999/04/18 20:50:01  morgan
  74.  * reliable behavior when trying to talk with a kernel that has a more
  75.  * modern capability implementation than the one the library was compiled
  76.  * with.
  77.  *
  78.  * Revision 1.1.1.1  1999/04/17 22:16:31  morgan
  79.  * release 1.0 of libcap
  80.  *
  81.  * Revision 1.5  1998/05/24 22:54:09  morgan
  82.  * updated for 2.1.104
  83.  *
  84.  * Revision 1.4  1997/05/14 05:17:13  morgan
  85.  * bug-fix from zefram (errno no set on success)
  86.  *
  87.  * Revision 1.3  1997/05/04 05:35:46  morgan
  88.  * fixed errno setting. syscalls do this part
  89.  *
  90.  * Revision 1.2  1997/04/28 00:57:11  morgan
  91.  * fixes and zefram's patches
  92.  *
  93.  * Revision 1.1  1997/04/21 04:32:52  morgan
  94.  * Initial revision
  95.  *
  96.  */