From 0cec0ffc787ee969b4003d04c031d38e2c523715 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20v=2E=20L=C3=B6wis?= Date: Sun, 28 Jul 2002 16:33:45 +0000 Subject: [PATCH] Patch #573770: Implement lchown. --- Doc/lib/libos.tex | 7 +++++++ Misc/NEWS | 6 +++--- Modules/posixmodule.c | 30 ++++++++++++++++++++++++++++++ configure | 7 ++++--- configure.in | 4 ++-- pyconfig.h.in | 3 +++ 6 files changed, 49 insertions(+), 8 deletions(-) diff --git a/Doc/lib/libos.tex b/Doc/lib/libos.tex index 7a6389039b6..d5f9a34ae03 100644 --- a/Doc/lib/libos.tex +++ b/Doc/lib/libos.tex @@ -641,6 +641,13 @@ and \var{gid}. Availability: \UNIX. \end{funcdesc} +\begin{funcdesc}{lchown}{path, uid, gid} +Change the owner and group id of \var{path} to the numeric \var{uid} +and gid. This function will not follow symbolic links. +Availability: \UNIX. +\versionadded{2.3} +\end{funcdesc} + \begin{funcdesc}{link}{src, dst} Create a hard link pointing to \var{src} named \var{dst}. Availability: \UNIX. diff --git a/Misc/NEWS b/Misc/NEWS index f8f3b7f5d22..f7a0bcd42b5 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -162,8 +162,8 @@ Extension modules This will create a temporary in-memory bsddb that won't be written to disk. -- posix.killpg, posix.mknod, and posix.getpgid have been added where - available. +- posix.lchown, posix.killpg, posix.mknod, and posix.getpgid have been + added where available. - The locale module now exposes the C library's gettext interface. @@ -339,7 +339,7 @@ Build to require editing the core to teach the trashcan mechanism about the new type. -- Accoring to Annex F of the current C standard, +- According to Annex F of the current C standard, The Standard C macro HUGE_VAL and its float and long double analogs, HUGE_VALF and HUGE_VALL, expand to expressions whose values are diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index 47bea6f9f92..61000673f42 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -930,6 +930,33 @@ posix_chown(PyObject *self, PyObject *args) } #endif /* HAVE_CHOWN */ +#ifdef HAVE_LCHOWN +PyDoc_STRVAR(posix_lchown__doc__, +"lchown(path, uid, gid)\n\n\ +Change the owner and group id of path to the numeric uid and gid.\n\ +This function will not follow symbolic links."); + +static PyObject * +posix_lchown(PyObject *self, PyObject *args) +{ + char *path = NULL; + int uid, gid; + int res; + if (!PyArg_ParseTuple(args, "etii:lchown", + Py_FileSystemDefaultEncoding, &path, + &uid, &gid)) + return NULL; + Py_BEGIN_ALLOW_THREADS + res = lchown(path, (uid_t) uid, (gid_t) gid); + Py_END_ALLOW_THREADS + if (res < 0) + return posix_error_with_allocated_filename(path); + PyMem_Free(path); + Py_INCREF(Py_None); + return Py_None; +} +#endif /* HAVE_LCHOWN */ + #ifdef HAVE_GETCWD PyDoc_STRVAR(posix_getcwd__doc__, @@ -6225,6 +6252,9 @@ static PyMethodDef posix_methods[] = { #ifdef HAVE_CHOWN {"chown", posix_chown, METH_VARARGS, posix_chown__doc__}, #endif /* HAVE_CHOWN */ +#ifdef HAVE_LCHOWN + {"lchown", posix_lchown, METH_VARARGS, posix_lchown__doc__}, +#endif /* HAVE_LCHOWN */ #ifdef HAVE_CHROOT {"chroot", posix_chroot, METH_VARARGS, posix_chroot__doc__}, #endif diff --git a/configure b/configure index 7fc3bfd1276..9024bcb718f 100755 --- a/configure +++ b/configure @@ -1,5 +1,5 @@ #! /bin/sh -# From configure.in Revision: 1.334 . +# From configure.in Revision: 1.335 . # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.53. # @@ -11436,13 +11436,14 @@ echo "${ECHO_T}MACHDEP_OBJS" >&6 + for ac_func in alarm chown chroot clock confstr ctermid ctermid_r execv \ fchdir flock fork fsync fdatasync fpathconf ftime ftruncate \ gai_strerror getgroups getlogin getpeername getpgid getpid getpwent getwd \ - hstrerror inet_pton kill killpg link lstat mkfifo mknod mktime mremap \ - nice pathconf pause plock poll pthread_init \ + hstrerror inet_pton kill killpg lchown link lstat mkfifo mknod mktime \ + mremap nice pathconf pause plock poll pthread_init \ putenv readlink \ select setegid seteuid setgid setgroups \ setlocale setregid setreuid setsid setpgid setuid setvbuf snprintf \ diff --git a/configure.in b/configure.in index 98d54d1a479..88a285f4871 100644 --- a/configure.in +++ b/configure.in @@ -1619,8 +1619,8 @@ AC_MSG_RESULT(MACHDEP_OBJS) AC_CHECK_FUNCS(alarm chown chroot clock confstr ctermid ctermid_r execv \ fchdir flock fork fsync fdatasync fpathconf ftime ftruncate \ gai_strerror getgroups getlogin getpeername getpgid getpid getpwent getwd \ - hstrerror inet_pton kill killpg link lstat mkfifo mknod mktime mremap \ - nice pathconf pause plock poll pthread_init \ + hstrerror inet_pton kill killpg lchown link lstat mkfifo mknod mktime \ + mremap nice pathconf pause plock poll pthread_init \ putenv readlink \ select setegid seteuid setgid setgroups \ setlocale setregid setreuid setsid setpgid setuid setvbuf snprintf \ diff --git a/pyconfig.h.in b/pyconfig.h.in index 8a9a1ada50a..05a355b06bf 100644 --- a/pyconfig.h.in +++ b/pyconfig.h.in @@ -211,6 +211,9 @@ Solaris and Linux, the necessary defines are already defined.) */ #undef HAVE_LARGEFILE_SUPPORT +/* Define to 1 if you have the `lchown' function. */ +#undef HAVE_LCHOWN + /* Define to 1 if you have the `dl' library (-ldl). */ #undef HAVE_LIBDL