diff options
| author | Paul Eggert | 2013-08-04 09:56:56 -0700 |
|---|---|---|
| committer | Paul Eggert | 2013-08-04 09:56:56 -0700 |
| commit | e0fdb6943066032db294720915c3bd644bf2bcd1 (patch) | |
| tree | 0aa420b81dc0187e2efec3ff4fe3cf046ad1c598 /m4 | |
| parent | 484ab23924d39b3e26d54074fd659633e1660ef4 (diff) | |
| download | emacs-e0fdb6943066032db294720915c3bd644bf2bcd1.tar.gz emacs-e0fdb6943066032db294720915c3bd644bf2bcd1.zip | |
Fix some minor races in hosts lacking mkostemp.
Gnulib's emulation of mkostemp doesn't have races that Emacs's does.
* configure.ac (mkostemp): Remove check for this function;
gnulib does the check now.
(mkstemp): Remove check for this no-longer-used function.
* lib/mkostemp.c, lib/secure_getenv.c, lib/tempname.c, lib/tempname.h:
* m4/mkostemp.m4, m4/secure_getenv.m4, m4/tempname.m4:
New files, copied from Gnulib.
* lib/gnulib.mk, m4/gnulib-comp.m4: Regenerate.
* admin/merge-gnulib (GNULIB_MODULES): Add mkostemp.
* lib-src/movemail.c (main):
* lib-src/update-game-score.c (write_scores):
Use mkostemp (which now works on all platforms, due to changes
in the portability layer) rather than mktemp (which has a race)
or mkstemp (which we no longer bother with).
* src/callproc.c (create_temp_file):
* src/filelock.c (create_lock_file):
Assume mkostemp, since it's now provided by Gnulib.
Fixes: debbugs:15015
Diffstat (limited to 'm4')
| -rw-r--r-- | m4/gnulib-comp.m4 | 44 | ||||
| -rw-r--r-- | m4/mkostemp.m4 | 23 | ||||
| -rw-r--r-- | m4/secure_getenv.m4 | 25 | ||||
| -rw-r--r-- | m4/tempname.m4 | 19 |
4 files changed, 111 insertions, 0 deletions
diff --git a/m4/gnulib-comp.m4 b/m4/gnulib-comp.m4 index d7062e862de..af9a9ca3ae0 100644 --- a/m4/gnulib-comp.m4 +++ b/m4/gnulib-comp.m4 | |||
| @@ -89,6 +89,7 @@ AC_DEFUN([gl_EARLY], | |||
| 89 | # Code from module lstat: | 89 | # Code from module lstat: |
| 90 | # Code from module manywarnings: | 90 | # Code from module manywarnings: |
| 91 | # Code from module memrchr: | 91 | # Code from module memrchr: |
| 92 | # Code from module mkostemp: | ||
| 92 | # Code from module mktime: | 93 | # Code from module mktime: |
| 93 | # Code from module multiarch: | 94 | # Code from module multiarch: |
| 94 | # Code from module nocrash: | 95 | # Code from module nocrash: |
| @@ -102,6 +103,7 @@ AC_DEFUN([gl_EARLY], | |||
| 102 | # Code from module readlink: | 103 | # Code from module readlink: |
| 103 | # Code from module readlinkat: | 104 | # Code from module readlinkat: |
| 104 | # Code from module root-uid: | 105 | # Code from module root-uid: |
| 106 | # Code from module secure_getenv: | ||
| 105 | # Code from module sig2str: | 107 | # Code from module sig2str: |
| 106 | # Code from module signal-h: | 108 | # Code from module signal-h: |
| 107 | # Code from module snippet/_Noreturn: | 109 | # Code from module snippet/_Noreturn: |
| @@ -134,6 +136,7 @@ AC_DEFUN([gl_EARLY], | |||
| 134 | # Code from module sys_select: | 136 | # Code from module sys_select: |
| 135 | # Code from module sys_stat: | 137 | # Code from module sys_stat: |
| 136 | # Code from module sys_time: | 138 | # Code from module sys_time: |
| 139 | # Code from module tempname: | ||
| 137 | # Code from module time: | 140 | # Code from module time: |
| 138 | # Code from module time_r: | 141 | # Code from module time_r: |
| 139 | # Code from module timer-time: | 142 | # Code from module timer-time: |
| @@ -274,6 +277,13 @@ AC_DEFUN([gl_INIT], | |||
| 274 | gl_PREREQ_MEMRCHR | 277 | gl_PREREQ_MEMRCHR |
| 275 | fi | 278 | fi |
| 276 | gl_STRING_MODULE_INDICATOR([memrchr]) | 279 | gl_STRING_MODULE_INDICATOR([memrchr]) |
| 280 | gl_FUNC_MKOSTEMP | ||
| 281 | if test $HAVE_MKOSTEMP = 0; then | ||
| 282 | AC_LIBOBJ([mkostemp]) | ||
| 283 | gl_PREREQ_MKOSTEMP | ||
| 284 | fi | ||
| 285 | gl_MODULE_INDICATOR([mkostemp]) | ||
| 286 | gl_STDLIB_MODULE_INDICATOR([mkostemp]) | ||
| 277 | gl_FUNC_MKTIME | 287 | gl_FUNC_MKTIME |
| 278 | if test $REPLACE_MKTIME = 1; then | 288 | if test $REPLACE_MKTIME = 1; then |
| 279 | AC_LIBOBJ([mktime]) | 289 | AC_LIBOBJ([mktime]) |
| @@ -381,9 +391,11 @@ AC_DEFUN([gl_INIT], | |||
| 381 | gl_gnulib_enabled_03e0aaad4cb89ca757653bd367a6ccb7=false | 391 | gl_gnulib_enabled_03e0aaad4cb89ca757653bd367a6ccb7=false |
| 382 | gl_gnulib_enabled_pathmax=false | 392 | gl_gnulib_enabled_pathmax=false |
| 383 | gl_gnulib_enabled_6099e9737f757db36c47fa9d9f02e88c=false | 393 | gl_gnulib_enabled_6099e9737f757db36c47fa9d9f02e88c=false |
| 394 | gl_gnulib_enabled_secure_getenv=false | ||
| 384 | gl_gnulib_enabled_stat=false | 395 | gl_gnulib_enabled_stat=false |
| 385 | gl_gnulib_enabled_strtoll=false | 396 | gl_gnulib_enabled_strtoll=false |
| 386 | gl_gnulib_enabled_strtoull=false | 397 | gl_gnulib_enabled_strtoull=false |
| 398 | gl_gnulib_enabled_tempname=false | ||
| 387 | gl_gnulib_enabled_682e609604ccaac6be382e4ee3a4eaec=false | 399 | gl_gnulib_enabled_682e609604ccaac6be382e4ee3a4eaec=false |
| 388 | func_gl_gnulib_m4code_260941c0e5dc67ec9e87d1fb321c300b () | 400 | func_gl_gnulib_m4code_260941c0e5dc67ec9e87d1fb321c300b () |
| 389 | { | 401 | { |
| @@ -485,6 +497,18 @@ AC_DEFUN([gl_INIT], | |||
| 485 | gl_gnulib_enabled_6099e9737f757db36c47fa9d9f02e88c=true | 497 | gl_gnulib_enabled_6099e9737f757db36c47fa9d9f02e88c=true |
| 486 | fi | 498 | fi |
| 487 | } | 499 | } |
| 500 | func_gl_gnulib_m4code_secure_getenv () | ||
| 501 | { | ||
| 502 | if ! $gl_gnulib_enabled_secure_getenv; then | ||
| 503 | gl_FUNC_SECURE_GETENV | ||
| 504 | if test $HAVE_SECURE_GETENV = 0; then | ||
| 505 | AC_LIBOBJ([secure_getenv]) | ||
| 506 | gl_PREREQ_SECURE_GETENV | ||
| 507 | fi | ||
| 508 | gl_STDLIB_MODULE_INDICATOR([secure_getenv]) | ||
| 509 | gl_gnulib_enabled_secure_getenv=true | ||
| 510 | fi | ||
| 511 | } | ||
| 488 | func_gl_gnulib_m4code_stat () | 512 | func_gl_gnulib_m4code_stat () |
| 489 | { | 513 | { |
| 490 | if ! $gl_gnulib_enabled_stat; then | 514 | if ! $gl_gnulib_enabled_stat; then |
| @@ -527,6 +551,14 @@ AC_DEFUN([gl_INIT], | |||
| 527 | gl_gnulib_enabled_strtoull=true | 551 | gl_gnulib_enabled_strtoull=true |
| 528 | fi | 552 | fi |
| 529 | } | 553 | } |
| 554 | func_gl_gnulib_m4code_tempname () | ||
| 555 | { | ||
| 556 | if ! $gl_gnulib_enabled_tempname; then | ||
| 557 | gl_FUNC_GEN_TEMPNAME | ||
| 558 | gl_gnulib_enabled_tempname=true | ||
| 559 | func_gl_gnulib_m4code_secure_getenv | ||
| 560 | fi | ||
| 561 | } | ||
| 530 | func_gl_gnulib_m4code_682e609604ccaac6be382e4ee3a4eaec () | 562 | func_gl_gnulib_m4code_682e609604ccaac6be382e4ee3a4eaec () |
| 531 | { | 563 | { |
| 532 | if ! $gl_gnulib_enabled_682e609604ccaac6be382e4ee3a4eaec; then | 564 | if ! $gl_gnulib_enabled_682e609604ccaac6be382e4ee3a4eaec; then |
| @@ -569,6 +601,9 @@ AC_DEFUN([gl_INIT], | |||
| 569 | if test $REPLACE_LSTAT = 1; then | 601 | if test $REPLACE_LSTAT = 1; then |
| 570 | func_gl_gnulib_m4code_stat | 602 | func_gl_gnulib_m4code_stat |
| 571 | fi | 603 | fi |
| 604 | if test $HAVE_MKOSTEMP = 0; then | ||
| 605 | func_gl_gnulib_m4code_tempname | ||
| 606 | fi | ||
| 572 | if test $HAVE_READLINK = 0 || test $REPLACE_READLINK = 1; then | 607 | if test $HAVE_READLINK = 0 || test $REPLACE_READLINK = 1; then |
| 573 | func_gl_gnulib_m4code_stat | 608 | func_gl_gnulib_m4code_stat |
| 574 | fi | 609 | fi |
| @@ -598,9 +633,11 @@ AC_DEFUN([gl_INIT], | |||
| 598 | AM_CONDITIONAL([gl_GNULIB_ENABLED_03e0aaad4cb89ca757653bd367a6ccb7], [$gl_gnulib_enabled_03e0aaad4cb89ca757653bd367a6ccb7]) | 633 | AM_CONDITIONAL([gl_GNULIB_ENABLED_03e0aaad4cb89ca757653bd367a6ccb7], [$gl_gnulib_enabled_03e0aaad4cb89ca757653bd367a6ccb7]) |
| 599 | AM_CONDITIONAL([gl_GNULIB_ENABLED_pathmax], [$gl_gnulib_enabled_pathmax]) | 634 | AM_CONDITIONAL([gl_GNULIB_ENABLED_pathmax], [$gl_gnulib_enabled_pathmax]) |
| 600 | AM_CONDITIONAL([gl_GNULIB_ENABLED_6099e9737f757db36c47fa9d9f02e88c], [$gl_gnulib_enabled_6099e9737f757db36c47fa9d9f02e88c]) | 635 | AM_CONDITIONAL([gl_GNULIB_ENABLED_6099e9737f757db36c47fa9d9f02e88c], [$gl_gnulib_enabled_6099e9737f757db36c47fa9d9f02e88c]) |
| 636 | AM_CONDITIONAL([gl_GNULIB_ENABLED_secure_getenv], [$gl_gnulib_enabled_secure_getenv]) | ||
| 601 | AM_CONDITIONAL([gl_GNULIB_ENABLED_stat], [$gl_gnulib_enabled_stat]) | 637 | AM_CONDITIONAL([gl_GNULIB_ENABLED_stat], [$gl_gnulib_enabled_stat]) |
| 602 | AM_CONDITIONAL([gl_GNULIB_ENABLED_strtoll], [$gl_gnulib_enabled_strtoll]) | 638 | AM_CONDITIONAL([gl_GNULIB_ENABLED_strtoll], [$gl_gnulib_enabled_strtoll]) |
| 603 | AM_CONDITIONAL([gl_GNULIB_ENABLED_strtoull], [$gl_gnulib_enabled_strtoull]) | 639 | AM_CONDITIONAL([gl_GNULIB_ENABLED_strtoull], [$gl_gnulib_enabled_strtoull]) |
| 640 | AM_CONDITIONAL([gl_GNULIB_ENABLED_tempname], [$gl_gnulib_enabled_tempname]) | ||
| 604 | AM_CONDITIONAL([gl_GNULIB_ENABLED_682e609604ccaac6be382e4ee3a4eaec], [$gl_gnulib_enabled_682e609604ccaac6be382e4ee3a4eaec]) | 641 | AM_CONDITIONAL([gl_GNULIB_ENABLED_682e609604ccaac6be382e4ee3a4eaec], [$gl_gnulib_enabled_682e609604ccaac6be382e4ee3a4eaec]) |
| 605 | # End of code from modules | 642 | # End of code from modules |
| 606 | m4_ifval(gl_LIBSOURCES_LIST, [ | 643 | m4_ifval(gl_LIBSOURCES_LIST, [ |
| @@ -806,6 +843,7 @@ AC_DEFUN([gl_FILE_LIST], [ | |||
| 806 | lib/md5.c | 843 | lib/md5.c |
| 807 | lib/md5.h | 844 | lib/md5.h |
| 808 | lib/memrchr.c | 845 | lib/memrchr.c |
| 846 | lib/mkostemp.c | ||
| 809 | lib/mktime-internal.h | 847 | lib/mktime-internal.h |
| 810 | lib/mktime.c | 848 | lib/mktime.c |
| 811 | lib/openat-priv.h | 849 | lib/openat-priv.h |
| @@ -821,6 +859,7 @@ AC_DEFUN([gl_FILE_LIST], [ | |||
| 821 | lib/readlink.c | 859 | lib/readlink.c |
| 822 | lib/readlinkat.c | 860 | lib/readlinkat.c |
| 823 | lib/root-uid.h | 861 | lib/root-uid.h |
| 862 | lib/secure_getenv.c | ||
| 824 | lib/sha1.c | 863 | lib/sha1.c |
| 825 | lib/sha1.h | 864 | lib/sha1.h |
| 826 | lib/sha256.c | 865 | lib/sha256.c |
| @@ -853,6 +892,8 @@ AC_DEFUN([gl_FILE_LIST], [ | |||
| 853 | lib/sys_select.in.h | 892 | lib/sys_select.in.h |
| 854 | lib/sys_stat.in.h | 893 | lib/sys_stat.in.h |
| 855 | lib/sys_time.in.h | 894 | lib/sys_time.in.h |
| 895 | lib/tempname.c | ||
| 896 | lib/tempname.h | ||
| 856 | lib/time.in.h | 897 | lib/time.in.h |
| 857 | lib/time_r.c | 898 | lib/time_r.c |
| 858 | lib/timespec-add.c | 899 | lib/timespec-add.c |
| @@ -908,6 +949,7 @@ AC_DEFUN([gl_FILE_LIST], [ | |||
| 908 | m4/manywarnings.m4 | 949 | m4/manywarnings.m4 |
| 909 | m4/md5.m4 | 950 | m4/md5.m4 |
| 910 | m4/memrchr.m4 | 951 | m4/memrchr.m4 |
| 952 | m4/mkostemp.m4 | ||
| 911 | m4/mktime.m4 | 953 | m4/mktime.m4 |
| 912 | m4/multiarch.m4 | 954 | m4/multiarch.m4 |
| 913 | m4/nocrash.m4 | 955 | m4/nocrash.m4 |
| @@ -919,6 +961,7 @@ AC_DEFUN([gl_FILE_LIST], [ | |||
| 919 | m4/putenv.m4 | 961 | m4/putenv.m4 |
| 920 | m4/readlink.m4 | 962 | m4/readlink.m4 |
| 921 | m4/readlinkat.m4 | 963 | m4/readlinkat.m4 |
| 964 | m4/secure_getenv.m4 | ||
| 922 | m4/setenv.m4 | 965 | m4/setenv.m4 |
| 923 | m4/sha1.m4 | 966 | m4/sha1.m4 |
| 924 | m4/sha256.m4 | 967 | m4/sha256.m4 |
| @@ -948,6 +991,7 @@ AC_DEFUN([gl_FILE_LIST], [ | |||
| 948 | m4/sys_socket_h.m4 | 991 | m4/sys_socket_h.m4 |
| 949 | m4/sys_stat_h.m4 | 992 | m4/sys_stat_h.m4 |
| 950 | m4/sys_time_h.m4 | 993 | m4/sys_time_h.m4 |
| 994 | m4/tempname.m4 | ||
| 951 | m4/time_h.m4 | 995 | m4/time_h.m4 |
| 952 | m4/time_r.m4 | 996 | m4/time_r.m4 |
| 953 | m4/timer_time.m4 | 997 | m4/timer_time.m4 |
diff --git a/m4/mkostemp.m4 b/m4/mkostemp.m4 new file mode 100644 index 00000000000..6d101eeda39 --- /dev/null +++ b/m4/mkostemp.m4 | |||
| @@ -0,0 +1,23 @@ | |||
| 1 | # mkostemp.m4 serial 2 | ||
| 2 | dnl Copyright (C) 2009-2013 Free Software Foundation, Inc. | ||
| 3 | dnl This file is free software; the Free Software Foundation | ||
| 4 | dnl gives unlimited permission to copy and/or distribute it, | ||
| 5 | dnl with or without modifications, as long as this notice is preserved. | ||
| 6 | |||
| 7 | AC_DEFUN([gl_FUNC_MKOSTEMP], | ||
| 8 | [ | ||
| 9 | AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) | ||
| 10 | |||
| 11 | dnl Persuade glibc <stdlib.h> to declare mkostemp(). | ||
| 12 | AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) | ||
| 13 | |||
| 14 | AC_CHECK_FUNCS_ONCE([mkostemp]) | ||
| 15 | if test $ac_cv_func_mkostemp != yes; then | ||
| 16 | HAVE_MKOSTEMP=0 | ||
| 17 | fi | ||
| 18 | ]) | ||
| 19 | |||
| 20 | # Prerequisites of lib/mkostemp.c. | ||
| 21 | AC_DEFUN([gl_PREREQ_MKOSTEMP], | ||
| 22 | [ | ||
| 23 | ]) | ||
diff --git a/m4/secure_getenv.m4 b/m4/secure_getenv.m4 new file mode 100644 index 00000000000..5da5298f669 --- /dev/null +++ b/m4/secure_getenv.m4 | |||
| @@ -0,0 +1,25 @@ | |||
| 1 | # Look up an environment variable more securely. | ||
| 2 | dnl Copyright 2013 Free Software Foundation, Inc. | ||
| 3 | dnl This file is free software; the Free Software Foundation | ||
| 4 | dnl gives unlimited permission to copy and/or distribute it, | ||
| 5 | dnl with or without modifications, as long as this notice is preserved. | ||
| 6 | |||
| 7 | AC_DEFUN([gl_FUNC_SECURE_GETENV], | ||
| 8 | [ | ||
| 9 | dnl Persuade glibc <stdlib.h> to declare secure_getenv(). | ||
| 10 | AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) | ||
| 11 | |||
| 12 | AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) | ||
| 13 | AC_CHECK_FUNCS_ONCE([secure_getenv]) | ||
| 14 | if test $ac_cv_func_secure_getenv = no; then | ||
| 15 | HAVE_SECURE_GETENV=0 | ||
| 16 | fi | ||
| 17 | ]) | ||
| 18 | |||
| 19 | # Prerequisites of lib/secure_getenv.c. | ||
| 20 | AC_DEFUN([gl_PREREQ_SECURE_GETENV], [ | ||
| 21 | AC_CHECK_FUNCS([__secure_getenv]) | ||
| 22 | if test $ac_cv_func___secure_getenv = no; then | ||
| 23 | AC_CHECK_FUNCS([issetugid]) | ||
| 24 | fi | ||
| 25 | ]) | ||
diff --git a/m4/tempname.m4 b/m4/tempname.m4 new file mode 100644 index 00000000000..a6e42dcea81 --- /dev/null +++ b/m4/tempname.m4 | |||
| @@ -0,0 +1,19 @@ | |||
| 1 | #serial 5 | ||
| 2 | |||
| 3 | # Copyright (C) 2006-2007, 2009-2013 Free Software Foundation, Inc. | ||
| 4 | # This file is free software; the Free Software Foundation | ||
| 5 | # gives unlimited permission to copy and/or distribute it, | ||
| 6 | # with or without modifications, as long as this notice is preserved. | ||
| 7 | |||
| 8 | # glibc provides __gen_tempname as a wrapper for mk[ds]temp. Expose | ||
| 9 | # it as a public API, and provide it on systems that are lacking. | ||
| 10 | AC_DEFUN([gl_FUNC_GEN_TEMPNAME], | ||
| 11 | [ | ||
| 12 | gl_PREREQ_TEMPNAME | ||
| 13 | ]) | ||
| 14 | |||
| 15 | # Prerequisites of lib/tempname.c. | ||
| 16 | AC_DEFUN([gl_PREREQ_TEMPNAME], | ||
| 17 | [ | ||
| 18 | : | ||
| 19 | ]) | ||