[Python-checkins] r88685 - in python/branches/py3k: Doc/library/socket.rst Lib/test/test_socket.py Misc/NEWS Modules/socketmodule.c configure configure.in pyconfig.h.in

antoine.pitrou python-checkins at python.org
Mon Feb 28 23:25:22 CET 2011


Author: antoine.pitrou
Date: Mon Feb 28 23:25:22 2011
New Revision: 88685

Log:
Issue #10866: Add socket.sethostname().  Initial patch by Ross Lagerwall.



Modified:
   python/branches/py3k/Doc/library/socket.rst
   python/branches/py3k/Lib/test/test_socket.py
   python/branches/py3k/Misc/NEWS
   python/branches/py3k/Modules/socketmodule.c
   python/branches/py3k/configure
   python/branches/py3k/configure.in
   python/branches/py3k/pyconfig.h.in

Modified: python/branches/py3k/Doc/library/socket.rst
==============================================================================
--- python/branches/py3k/Doc/library/socket.rst	(original)
+++ python/branches/py3k/Doc/library/socket.rst	Mon Feb 28 23:25:22 2011
@@ -521,6 +521,16 @@
    meanings.
 
 
+.. function:: sethostname(name)
+
+   Set the machine's hostname to *name*.  This will raise a
+   :exc:`socket.error` if you don't have enough rights.
+
+   Availability: Unix.
+
+   .. versionadded:: 3.3
+
+
 .. data:: SocketType
 
    This is a Python type object that represents the socket object type. It is the

Modified: python/branches/py3k/Lib/test/test_socket.py
==============================================================================
--- python/branches/py3k/Lib/test/test_socket.py	(original)
+++ python/branches/py3k/Lib/test/test_socket.py	Mon Feb 28 23:25:22 2011
@@ -325,6 +325,26 @@
         if not fqhn in all_host_names:
             self.fail("Error testing host resolution mechanisms. (fqdn: %s, all: %s)" % (fqhn, repr(all_host_names)))
 
+    @unittest.skipUnless(hasattr(socket, 'sethostname'), "test needs socket.sethostname()")
+    @unittest.skipUnless(hasattr(socket, 'gethostname'), "test needs socket.gethostname()")
+    def test_sethostname(self):
+        oldhn = socket.gethostname()
+        try:
+            socket.sethostname('new')
+        except socket.error as e:
+            if e.errno == errno.EPERM:
+                self.skipTest("test should be run as root")
+            else:
+                raise
+        try:
+            # running test as root!
+            self.assertEqual(socket.gethostname(), 'new')
+            # Should work with bytes objects too
+            socket.sethostname(b'bar')
+            self.assertEqual(socket.gethostname(), 'bar')
+        finally:
+            socket.sethostname(oldhn)
+
     def testRefCountGetNameInfo(self):
         # Testing reference count for getnameinfo
         if hasattr(sys, "getrefcount"):

Modified: python/branches/py3k/Misc/NEWS
==============================================================================
--- python/branches/py3k/Misc/NEWS	(original)
+++ python/branches/py3k/Misc/NEWS	Mon Feb 28 23:25:22 2011
@@ -35,6 +35,8 @@
 Library
 -------
 
+- Issue #10866: Add socket.sethostname().  Initial patch by Ross Lagerwall.
+
 - Issue #11140: Lock.release() now raises a RuntimeError when attempting
   to release an unacquired lock, as claimed in the threading documentation.
   The _thread.error exception is now an alias of RuntimeError.  Patch by

Modified: python/branches/py3k/Modules/socketmodule.c
==============================================================================
--- python/branches/py3k/Modules/socketmodule.c	(original)
+++ python/branches/py3k/Modules/socketmodule.c	Mon Feb 28 23:25:22 2011
@@ -3135,6 +3135,37 @@
 \n\
 Return the current host name.");
 
+#ifdef HAVE_SETHOSTNAME
+PyDoc_STRVAR(sethostname_doc,
+"sethostname(name)\n\n\
+Sets the hostname to name.");
+
+static PyObject *
+socket_sethostname(PyObject *self, PyObject *args)
+{
+    PyObject *hnobj;
+    Py_buffer buf;
+    int res, flag = 0;
+
+    if (!PyArg_ParseTuple(args, "S:sethostname", &hnobj)) {
+        PyErr_Clear();
+        if (!PyArg_ParseTuple(args, "O&:sethostname",
+                PyUnicode_FSConverter, &hnobj))
+            return NULL;
+        flag = 1;
+    }
+    res = PyObject_GetBuffer(hnobj, &buf, PyBUF_SIMPLE);
+    if (!res) {
+        res = sethostname(buf.buf, buf.len);
+        PyBuffer_Release(&buf);
+    }
+    if (flag)
+        Py_DECREF(hnobj);
+    if (res)
+        return set_error();
+    Py_RETURN_NONE;
+}
+#endif
 
 /* Python interface to gethostbyname(name). */
 
@@ -4233,6 +4264,10 @@
      METH_VARARGS, gethostbyaddr_doc},
     {"gethostname",             socket_gethostname,
      METH_NOARGS,  gethostname_doc},
+#ifdef HAVE_SETHOSTNAME
+    {"sethostname",             socket_sethostname,
+     METH_VARARGS,  sethostname_doc},
+#endif
     {"getservbyname",           socket_getservbyname,
      METH_VARARGS, getservbyname_doc},
     {"getservbyport",           socket_getservbyport,

Modified: python/branches/py3k/configure
==============================================================================
--- python/branches/py3k/configure	(original)
+++ python/branches/py3k/configure	Mon Feb 28 23:25:22 2011
@@ -1,5 +1,5 @@
 #! /bin/sh
-# From configure.in Revision: 88624 .
+# From configure.in Revision: 88625 .
 # Guess values for system-dependent variables and create Makefiles.
 # Generated by GNU Autoconf 2.65 for python 3.3.
 #
@@ -9319,7 +9319,7 @@
  mkfifoat mknod mknodat mktime mremap nice openat pathconf pause plock poll \
  pthread_init putenv readlink readlinkat realpath renameat \
  select sem_open sem_timedwait sem_getvalue sem_unlink sendfile setegid seteuid \
- setgid \
+ setgid sethostname \
  setlocale setregid setreuid setresuid setresgid setsid setpgid setpgrp setpriority setuid setvbuf \
  sigaction siginterrupt sigrelse snprintf strftime strlcpy symlinkat \
  sysconf tcgetpgrp tcsetpgrp tempnam timegm times tmpfile tmpnam tmpnam_r \

Modified: python/branches/py3k/configure.in
==============================================================================
--- python/branches/py3k/configure.in	(original)
+++ python/branches/py3k/configure.in	Mon Feb 28 23:25:22 2011
@@ -2542,7 +2542,7 @@
  mkfifoat mknod mknodat mktime mremap nice openat pathconf pause plock poll \
  pthread_init putenv readlink readlinkat realpath renameat \
  select sem_open sem_timedwait sem_getvalue sem_unlink sendfile setegid seteuid \
- setgid \
+ setgid sethostname \
  setlocale setregid setreuid setresuid setresgid setsid setpgid setpgrp setpriority setuid setvbuf \
  sigaction siginterrupt sigrelse snprintf strftime strlcpy symlinkat \
  sysconf tcgetpgrp tcsetpgrp tempnam timegm times tmpfile tmpnam tmpnam_r \

Modified: python/branches/py3k/pyconfig.h.in
==============================================================================
--- python/branches/py3k/pyconfig.h.in	(original)
+++ python/branches/py3k/pyconfig.h.in	Mon Feb 28 23:25:22 2011
@@ -443,6 +443,9 @@
 /* Define to 1 if you have the `resolv' library (-lresolv). */
 #undef HAVE_LIBRESOLV
 
+/* Define to 1 if you have the `sendfile' library (-lsendfile). */
+#undef HAVE_LIBSENDFILE
+
 /* Define to 1 if you have the <libutil.h> header file. */
 #undef HAVE_LIBUTIL_H
 
@@ -533,12 +536,6 @@
 /* Define if the OS supports pipe2() */
 #undef HAVE_PIPE2
 
-/* Define if the OS supports pipe2() */
-#undef HAVE_PIPE2
-
-/* Define if the OS supports pipe2() */
-#undef HAVE_PIPE2
-
 /* Define to 1 if you have the `plock' function. */
 #undef HAVE_PLOCK
 
@@ -623,6 +620,9 @@
 /* Define to 1 if you have the `sem_unlink' function. */
 #undef HAVE_SEM_UNLINK
 
+/* Define to 1 if you have the `sendfile' function. */
+#undef HAVE_SENDFILE
+
 /* Define to 1 if you have the `setegid' function. */
 #undef HAVE_SETEGID
 
@@ -635,6 +635,9 @@
 /* Define if you have the 'setgroups' function. */
 #undef HAVE_SETGROUPS
 
+/* Define to 1 if you have the `sethostname' function. */
+#undef HAVE_SETHOSTNAME
+
 /* Define to 1 if you have the `setitimer' function. */
 #undef HAVE_SETITIMER
 
@@ -849,6 +852,9 @@
 /* Define to 1 if you have the <sys/types.h> header file. */
 #undef HAVE_SYS_TYPES_H
 
+/* Define to 1 if you have the <sys/uio.h> header file. */
+#undef HAVE_SYS_UIO_H
+
 /* Define to 1 if you have the <sys/un.h> header file. */
 #undef HAVE_SYS_UN_H
 
@@ -1084,9 +1090,6 @@
 /* The size of `size_t', as computed by sizeof. */
 #undef SIZEOF_SIZE_T
 
-/* Define to 1 if you have the `sendfile' function. */
-#undef HAVE_SENDFILE
-
 /* The size of `time_t', as computed by sizeof. */
 #undef SIZEOF_TIME_T
 


More information about the Python-checkins mailing list