summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin v. Löwis <martin@v.loewis.de>2002-07-28 16:33:45 (GMT)
committerMartin v. Löwis <martin@v.loewis.de>2002-07-28 16:33:45 (GMT)
commit0cec0ffc787ee969b4003d04c031d38e2c523715 (patch)
treecc896af4474d199540e76940133779e70bf400c7
parentddc6f4748e827ba655816987215394afbf811810 (diff)
downloadcpython-0cec0ffc787ee969b4003d04c031d38e2c523715.zip
cpython-0cec0ffc787ee969b4003d04c031d38e2c523715.tar.gz
cpython-0cec0ffc787ee969b4003d04c031d38e2c523715.tar.bz2
Patch #573770: Implement lchown.
-rw-r--r--Doc/lib/libos.tex7
-rw-r--r--Misc/NEWS6
-rw-r--r--Modules/posixmodule.c30
-rwxr-xr-xconfigure7
-rw-r--r--configure.in4
-rw-r--r--pyconfig.h.in3
6 files changed, 49 insertions, 8 deletions
diff --git a/Doc/lib/libos.tex b/Doc/lib/libos.tex
index 7a63890..d5f9a34 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 f8f3b7f..f7a0bcd 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 47bea6f..6100067 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 7fc3bfd..9024bcb 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.
#
@@ -11438,11 +11438,12 @@ 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 98d54d1..88a285f 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 8a9a1ad..05a355b 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