mirror of
				https://github.com/python/cpython.git
				synced 2025-10-30 21:21:22 +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{}. | ||||
| \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}{} | ||||
| Calls the system call \cfunction{setpgrp()} or \cfunction{setpgrp(0, | ||||
| 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. | ||||
| 
 | ||||
| - posix supports chroot where available. | ||||
| - posix supports chroot and setgroups where available. | ||||
| 
 | ||||
| - Decompression objects in the zlib module now accept an optional | ||||
|   second parameter to decompress() that specifies the maximum amount | ||||
|  |  | |||
|  | @ -3127,6 +3127,51 @@ posix_setgid(PyObject *self, PyObject *args) | |||
| } | ||||
| #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 | ||||
| static char posix_waitpid__doc__[] = | ||||
|  | @ -5467,6 +5512,9 @@ static PyMethodDef posix_methods[] = { | |||
| #ifdef HAVE_SETGID | ||||
| 	{"setgid",	posix_setgid, METH_VARARGS, posix_setgid__doc__}, | ||||
| #endif /* HAVE_SETGID */ | ||||
| #ifdef HAVE_SETGROUPS | ||||
| 	{"setgroups",	posix_setgroups, METH_VARARGS, posix_setgroups__doc__}, | ||||
| #endif /* HAVE_SETGROUPS */ | ||||
| #ifdef HAVE_SETPGRP | ||||
| 	{"setpgrp",	posix_setpgrp, METH_VARARGS, posix_setpgrp__doc__}, | ||||
| #endif /* HAVE_SETPGRP */ | ||||
|  |  | |||
							
								
								
									
										4
									
								
								configure
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								configure
									
										
									
									
										vendored
									
									
								
							|  | @ -1,6 +1,6 @@ | |||
| #! /bin/sh | ||||
| 
 | ||||
| # From configure.in Revision: 1.268  | ||||
| # From configure.in Revision: 1.269  | ||||
| 
 | ||||
| # Guess values for system-dependent variables and create Makefiles. | ||||
| # 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 \ | ||||
|  nice pathconf pause plock poll pthread_init \ | ||||
|  putenv readlink \ | ||||
|  select setegid seteuid setgid \ | ||||
|  select setegid seteuid setgid setgroups \ | ||||
|  setlocale setregid setreuid setsid setpgid setuid setvbuf snprintf \ | ||||
|  sigaction siginterrupt sigrelse strftime strptime symlink sysconf \ | ||||
|  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 \ | ||||
|  nice pathconf pause plock poll pthread_init \ | ||||
|  putenv readlink \ | ||||
|  select setegid seteuid setgid \ | ||||
|  select setegid seteuid setgid setgroups \ | ||||
|  setlocale setregid setreuid setsid setpgid setuid setvbuf snprintf \ | ||||
|  sigaction siginterrupt sigrelse strftime strptime symlink sysconf \ | ||||
|  tcgetpgrp tcsetpgrp tempnam timegm times tmpfile tmpnam tmpnam_r \ | ||||
|  |  | |||
|  | @ -498,6 +498,9 @@ | |||
| /* Define if you have the setgid function.  */ | ||||
| #undef HAVE_SETGID | ||||
| 
 | ||||
| /* Define if you have the setgroups function.  */ | ||||
| #undef HAVE_SETGROUPS | ||||
| 
 | ||||
| /* Define if you have the setlocale function.  */ | ||||
| #undef HAVE_SETLOCALE | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Martin v. Löwis
						Martin v. Löwis