mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 05:31:20 +00:00 
			
		
		
		
	Expose setgroups. Fixes feature request #468116.
This commit is contained in:
		
							parent
							
								
									6b47129424
								
							
						
					
					
						commit
						61c5edf6fc
					
				
					 6 changed files with 62 additions and 4 deletions
				
			
		|  | @ -204,6 +204,13 @@ Set the current process' group id. | ||||||
| Availability: \UNIX{}. | Availability: \UNIX{}. | ||||||
| \end{funcdesc} | \end{funcdesc} | ||||||
| 
 | 
 | ||||||
|  | \begin{funcdesc}{setgroups}{groups} | ||||||
|  | Set list of supplemental group ids associated with the current | ||||||
|  | process to \var{groups}. | ||||||
|  | Availability: \UNIX{}. | ||||||
|  | \versionadded{2.2} | ||||||
|  | \end{funcdesc} | ||||||
|  | 
 | ||||||
| \begin{funcdesc}{setpgrp}{} | \begin{funcdesc}{setpgrp}{} | ||||||
| Calls the system call \cfunction{setpgrp()} or \cfunction{setpgrp(0, | Calls the system call \cfunction{setpgrp()} or \cfunction{setpgrp(0, | ||||||
| 0)} depending on which version is implemented (if any).  See the | 0)} depending on which version is implemented (if any).  See the | ||||||
|  |  | ||||||
|  | @ -44,7 +44,7 @@ Extension modules | ||||||
| 
 | 
 | ||||||
| - readline now supports setting the startup_hook and the pre_event_hook. | - readline now supports setting the startup_hook and the pre_event_hook. | ||||||
| 
 | 
 | ||||||
| - posix supports chroot where available. | - posix supports chroot and setgroups where available. | ||||||
| 
 | 
 | ||||||
| - Decompression objects in the zlib module now accept an optional | - Decompression objects in the zlib module now accept an optional | ||||||
|   second parameter to decompress() that specifies the maximum amount |   second parameter to decompress() that specifies the maximum amount | ||||||
|  |  | ||||||
|  | @ -3127,6 +3127,51 @@ posix_setgid(PyObject *self, PyObject *args) | ||||||
| } | } | ||||||
| #endif /* HAVE_SETGID */ | #endif /* HAVE_SETGID */ | ||||||
| 
 | 
 | ||||||
|  | #ifdef HAVE_SETGROUPS | ||||||
|  | static char posix_setgroups__doc__[] = | ||||||
|  | "setgroups(list) -> None\n\
 | ||||||
|  | Set the groups of the current process to list."; | ||||||
|  | 
 | ||||||
|  | static PyObject * | ||||||
|  | posix_setgroups(PyObject *self, PyObject *args) | ||||||
|  | { | ||||||
|  | 	PyObject *groups; | ||||||
|  | 	int i, len; | ||||||
|  |         gid_t grouplist[MAX_GROUPS]; | ||||||
|  | 	 | ||||||
|  | 	if (!PyArg_ParseTuple(args, "O:setgid", &groups)) | ||||||
|  | 		return NULL; | ||||||
|  | 	if (!PySequence_Check(groups)) { | ||||||
|  | 		PyErr_SetString(PyExc_TypeError, "setgroups argument must be a sequence"); | ||||||
|  | 		return NULL; | ||||||
|  | 	} | ||||||
|  | 	len = PySequence_Size(groups); | ||||||
|  | 	if (len > MAX_GROUPS) { | ||||||
|  | 		PyErr_SetString(PyExc_ValueError, "too many groups"); | ||||||
|  | 		return NULL; | ||||||
|  | 	} | ||||||
|  | 	for(i = 0; i < len; i++) { | ||||||
|  | 		PyObject *elem; | ||||||
|  | 		elem = PySequence_GetItem(groups, i); | ||||||
|  | 		if (!elem) | ||||||
|  | 			return NULL; | ||||||
|  | 		if (!PyInt_Check(elem)) { | ||||||
|  | 			PyErr_SetString(PyExc_TypeError, | ||||||
|  | 					"groups must be integers"); | ||||||
|  | 			Py_DECREF(elem); | ||||||
|  | 			return NULL; | ||||||
|  | 		} | ||||||
|  | 		/* XXX: check that value fits into gid_t. */ | ||||||
|  | 		grouplist[i] = PyInt_AsLong(elem); | ||||||
|  | 		Py_DECREF(elem); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	if (setgroups(len, grouplist) < 0) | ||||||
|  | 		return posix_error(); | ||||||
|  | 	Py_INCREF(Py_None); | ||||||
|  | 	return Py_None; | ||||||
|  | } | ||||||
|  | #endif /* HAVE_SETGROUPS */ | ||||||
| 
 | 
 | ||||||
| #ifdef HAVE_WAITPID | #ifdef HAVE_WAITPID | ||||||
| static char posix_waitpid__doc__[] = | static char posix_waitpid__doc__[] = | ||||||
|  | @ -5467,6 +5512,9 @@ static PyMethodDef posix_methods[] = { | ||||||
| #ifdef HAVE_SETGID | #ifdef HAVE_SETGID | ||||||
| 	{"setgid",	posix_setgid, METH_VARARGS, posix_setgid__doc__}, | 	{"setgid",	posix_setgid, METH_VARARGS, posix_setgid__doc__}, | ||||||
| #endif /* HAVE_SETGID */ | #endif /* HAVE_SETGID */ | ||||||
|  | #ifdef HAVE_SETGROUPS | ||||||
|  | 	{"setgroups",	posix_setgroups, METH_VARARGS, posix_setgroups__doc__}, | ||||||
|  | #endif /* HAVE_SETGROUPS */ | ||||||
| #ifdef HAVE_SETPGRP | #ifdef HAVE_SETPGRP | ||||||
| 	{"setpgrp",	posix_setpgrp, METH_VARARGS, posix_setpgrp__doc__}, | 	{"setpgrp",	posix_setpgrp, METH_VARARGS, posix_setpgrp__doc__}, | ||||||
| #endif /* HAVE_SETPGRP */ | #endif /* HAVE_SETPGRP */ | ||||||
|  |  | ||||||
							
								
								
									
										4
									
								
								configure
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								configure
									
										
									
									
										vendored
									
									
								
							|  | @ -1,6 +1,6 @@ | ||||||
| #! /bin/sh | #! /bin/sh | ||||||
| 
 | 
 | ||||||
| # From configure.in Revision: 1.268  | # From configure.in Revision: 1.269  | ||||||
| 
 | 
 | ||||||
| # Guess values for system-dependent variables and create Makefiles. | # Guess values for system-dependent variables and create Makefiles. | ||||||
| # Generated automatically using autoconf version 2.13  | # Generated automatically using autoconf version 2.13  | ||||||
|  | @ -4804,7 +4804,7 @@ for ac_func in alarm chown chroot clock confstr ctermid ctermid_r execv \ | ||||||
|  hstrerror inet_pton kill link lstat mkfifo mktime mremap \ |  hstrerror inet_pton kill link lstat mkfifo mktime mremap \ | ||||||
|  nice pathconf pause plock poll pthread_init \ |  nice pathconf pause plock poll pthread_init \ | ||||||
|  putenv readlink \ |  putenv readlink \ | ||||||
|  select setegid seteuid setgid \ |  select setegid seteuid setgid setgroups \ | ||||||
|  setlocale setregid setreuid setsid setpgid setuid setvbuf snprintf \ |  setlocale setregid setreuid setsid setpgid setuid setvbuf snprintf \ | ||||||
|  sigaction siginterrupt sigrelse strftime strptime symlink sysconf \ |  sigaction siginterrupt sigrelse strftime strptime symlink sysconf \ | ||||||
|  tcgetpgrp tcsetpgrp tempnam timegm times tmpfile tmpnam tmpnam_r \ |  tcgetpgrp tcsetpgrp tempnam timegm times tmpfile tmpnam tmpnam_r \ | ||||||
|  |  | ||||||
|  | @ -1391,7 +1391,7 @@ AC_CHECK_FUNCS(alarm chown chroot clock confstr ctermid ctermid_r execv \ | ||||||
|  hstrerror inet_pton kill link lstat mkfifo mktime mremap \ |  hstrerror inet_pton kill link lstat mkfifo mktime mremap \ | ||||||
|  nice pathconf pause plock poll pthread_init \ |  nice pathconf pause plock poll pthread_init \ | ||||||
|  putenv readlink \ |  putenv readlink \ | ||||||
|  select setegid seteuid setgid \ |  select setegid seteuid setgid setgroups \ | ||||||
|  setlocale setregid setreuid setsid setpgid setuid setvbuf snprintf \ |  setlocale setregid setreuid setsid setpgid setuid setvbuf snprintf \ | ||||||
|  sigaction siginterrupt sigrelse strftime strptime symlink sysconf \ |  sigaction siginterrupt sigrelse strftime strptime symlink sysconf \ | ||||||
|  tcgetpgrp tcsetpgrp tempnam timegm times tmpfile tmpnam tmpnam_r \ |  tcgetpgrp tcsetpgrp tempnam timegm times tmpfile tmpnam tmpnam_r \ | ||||||
|  |  | ||||||
|  | @ -498,6 +498,9 @@ | ||||||
| /* Define if you have the setgid function.  */ | /* Define if you have the setgid function.  */ | ||||||
| #undef HAVE_SETGID | #undef HAVE_SETGID | ||||||
| 
 | 
 | ||||||
|  | /* Define if you have the setgroups function.  */ | ||||||
|  | #undef HAVE_SETGROUPS | ||||||
|  | 
 | ||||||
| /* Define if you have the setlocale function.  */ | /* Define if you have the setlocale function.  */ | ||||||
| #undef HAVE_SETLOCALE | #undef HAVE_SETLOCALE | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Martin v. Löwis
						Martin v. Löwis