Annotate

util-src/pposix.c @ 13232:e0ab20519ce5

plugins: Use get_option_array for some list shaped options Passing something from module:get_option() to ipairs() suggests that the option is a list of some sort.
author Kim Alvefur <zash@zash.se>
date Fri, 21 Jul 2023 22:48:54 +0200
parent 13184:d16845afb3e2
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2923
b7049746bd29 Update copyright headers for 2010
Matthew Wild <mwild1@gmail.com>
parents: 2830
diff changeset
1 /* Prosody IM
b7049746bd29 Update copyright headers for 2010
Matthew Wild <mwild1@gmail.com>
parents: 2830
diff changeset
2 -- Copyright (C) 2008-2010 Matthew Wild
b7049746bd29 Update copyright headers for 2010
Matthew Wild <mwild1@gmail.com>
parents: 2830
diff changeset
3 -- Copyright (C) 2008-2010 Waqas Hussain
864
416c812acde5 pposix: Small fix for copyright notice
Matthew Wild <mwild1@gmail.com>
parents: 861
diff changeset
4 -- Copyright (C) 2009 Tobias Markmann
2436
ccc71b5d2e01 util.posix: Trailing whitespace
Matthew Wild <mwild1@gmail.com>
parents: 2060
diff changeset
5 --
766
433a5226267f Licensing/version updates for some files (forgot to commit, doh...)
Matthew Wild <mwild1@gmail.com>
parents: 730
diff changeset
6 -- This project is MIT/X11 licensed. Please see the
433a5226267f Licensing/version updates for some files (forgot to commit, doh...)
Matthew Wild <mwild1@gmail.com>
parents: 730
diff changeset
7 -- COPYING file in the source package for more information.
433a5226267f Licensing/version updates for some files (forgot to commit, doh...)
Matthew Wild <mwild1@gmail.com>
parents: 730
diff changeset
8 --
586
b828d7d47973 Add posix support library, and adjust makefiles for it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9 */
b828d7d47973 Add posix support library, and adjust makefiles for it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10
766
433a5226267f Licensing/version updates for some files (forgot to commit, doh...)
Matthew Wild <mwild1@gmail.com>
parents: 730
diff changeset
11 /*
433a5226267f Licensing/version updates for some files (forgot to commit, doh...)
Matthew Wild <mwild1@gmail.com>
parents: 730
diff changeset
12 * pposix.c
433a5226267f Licensing/version updates for some files (forgot to commit, doh...)
Matthew Wild <mwild1@gmail.com>
parents: 730
diff changeset
13 * POSIX support functions for Lua
586
b828d7d47973 Add posix support library, and adjust makefiles for it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
14 */
b828d7d47973 Add posix support library, and adjust makefiles for it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
15
8012
e898c8fda986 util.pposix: Remove fallocate
Kim Alvefur <zash@zash.se>
parents: 8010
diff changeset
16 #define MODULE_VERSION "0.4.0"
727
78c9542de94e pposix: Add _NAME and _VERSION
Matthew Wild <mwild1@gmail.com>
parents: 723
diff changeset
17
7931
b619b85e01aa util.pposix, configure: Move _GNU_SOURCE macro into source files
Kim Alvefur <zash@zash.se>
parents: 7926
diff changeset
18
b619b85e01aa util.pposix, configure: Move _GNU_SOURCE macro into source files
Kim Alvefur <zash@zash.se>
parents: 7926
diff changeset
19 #if defined(__linux__)
9150
c1d5f52274cf net, pposix, signal: Check for redefined defines, fix warnings.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 9028
diff changeset
20 #ifndef _GNU_SOURCE
7931
b619b85e01aa util.pposix, configure: Move _GNU_SOURCE macro into source files
Kim Alvefur <zash@zash.se>
parents: 7926
diff changeset
21 #define _GNU_SOURCE
9150
c1d5f52274cf net, pposix, signal: Check for redefined defines, fix warnings.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 9028
diff changeset
22 #endif
7931
b619b85e01aa util.pposix, configure: Move _GNU_SOURCE macro into source files
Kim Alvefur <zash@zash.se>
parents: 7926
diff changeset
23 #else
9150
c1d5f52274cf net, pposix, signal: Check for redefined defines, fix warnings.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 9028
diff changeset
24 #ifndef _DEFAULT_SOURCE
7931
b619b85e01aa util.pposix, configure: Move _GNU_SOURCE macro into source files
Kim Alvefur <zash@zash.se>
parents: 7926
diff changeset
25 #define _DEFAULT_SOURCE
b619b85e01aa util.pposix, configure: Move _GNU_SOURCE macro into source files
Kim Alvefur <zash@zash.se>
parents: 7926
diff changeset
26 #endif
9150
c1d5f52274cf net, pposix, signal: Check for redefined defines, fix warnings.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 9028
diff changeset
27 #endif
9681
861d510e1876 util.pposix: Don't define POSIX_C_SOURCE on FreeBSD to ensure visibility of initgroups()
Matthew Wild <mwild1@gmail.com>
parents: 9282
diff changeset
28
9280
37b796cc366a util.pposix: Fix or silence a warning on OS X (#1202)
Kim Alvefur <zash@zash.se>
parents: 9278
diff changeset
29 #if defined(__APPLE__)
9282
778d2dbfc784 util.pposix: Allow _DARWIN_C_SOURCE to be overriden
Kim Alvefur <zash@zash.se>
parents: 9281
diff changeset
30 #ifndef _DARWIN_C_SOURCE
9280
37b796cc366a util.pposix: Fix or silence a warning on OS X (#1202)
Kim Alvefur <zash@zash.se>
parents: 9278
diff changeset
31 #define _DARWIN_C_SOURCE
37b796cc366a util.pposix: Fix or silence a warning on OS X (#1202)
Kim Alvefur <zash@zash.se>
parents: 9278
diff changeset
32 #endif
9282
778d2dbfc784 util.pposix: Allow _DARWIN_C_SOURCE to be overriden
Kim Alvefur <zash@zash.se>
parents: 9281
diff changeset
33 #endif
9681
861d510e1876 util.pposix: Don't define POSIX_C_SOURCE on FreeBSD to ensure visibility of initgroups()
Matthew Wild <mwild1@gmail.com>
parents: 9282
diff changeset
34
861d510e1876 util.pposix: Don't define POSIX_C_SOURCE on FreeBSD to ensure visibility of initgroups()
Matthew Wild <mwild1@gmail.com>
parents: 9282
diff changeset
35 #if ! defined(__FreeBSD__)
9150
c1d5f52274cf net, pposix, signal: Check for redefined defines, fix warnings.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 9028
diff changeset
36 #ifndef _POSIX_C_SOURCE
7931
b619b85e01aa util.pposix, configure: Move _GNU_SOURCE macro into source files
Kim Alvefur <zash@zash.se>
parents: 7926
diff changeset
37 #define _POSIX_C_SOURCE 200809L
9150
c1d5f52274cf net, pposix, signal: Check for redefined defines, fix warnings.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 9028
diff changeset
38 #endif
9681
861d510e1876 util.pposix: Don't define POSIX_C_SOURCE on FreeBSD to ensure visibility of initgroups()
Matthew Wild <mwild1@gmail.com>
parents: 9282
diff changeset
39 #endif
7931
b619b85e01aa util.pposix, configure: Move _GNU_SOURCE macro into source files
Kim Alvefur <zash@zash.se>
parents: 7926
diff changeset
40
586
b828d7d47973 Add posix support library, and adjust makefiles for it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
41 #include <stdlib.h>
2438
819ba949c7bc util.pposix: Add pposix.umask(), bump version to 0.3.2 (and do the same in mod_posix)
Matthew Wild <mwild1@gmail.com>
parents: 2437
diff changeset
42 #include <math.h>
586
b828d7d47973 Add posix support library, and adjust makefiles for it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
43 #include <unistd.h>
b828d7d47973 Add posix support library, and adjust makefiles for it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
44 #include <libgen.h>
859
43f7e342135d Adding setrlimits() binding.
Tobias Markmann <tm@ayena.de>
parents: 804
diff changeset
45 #include <sys/resource.h>
586
b828d7d47973 Add posix support library, and adjust makefiles for it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
46 #include <sys/types.h>
b828d7d47973 Add posix support library, and adjust makefiles for it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
47 #include <sys/stat.h>
3481
72d3c8029178 util.pposix: Add pposix.uname(), bump version
Matthew Wild <mwild1@gmail.com>
parents: 3471
diff changeset
48 #include <sys/utsname.h>
586
b828d7d47973 Add posix support library, and adjust makefiles for it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
49 #include <fcntl.h>
b828d7d47973 Add posix support library, and adjust makefiles for it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
50
722
63456c9d0522 mod_posix: Support for logging to syslog (log = 'syslog' in config)
Matthew Wild <mwild1@gmail.com>
parents: 588
diff changeset
51 #include <syslog.h>
804
9bc1544c99b7 util.pposix: Add getuid/setuid (we don't use them yet)
Matthew Wild <mwild1@gmail.com>
parents: 796
diff changeset
52 #include <pwd.h>
1578
5bd8b3bdbfbc pposix: Add setgid() function
Matthew Wild <mwild1@gmail.com>
parents: 1565
diff changeset
53 #include <grp.h>
722
63456c9d0522 mod_posix: Support for logging to syslog (log = 'syslog' in config)
Matthew Wild <mwild1@gmail.com>
parents: 588
diff changeset
54
63456c9d0522 mod_posix: Support for logging to syslog (log = 'syslog' in config)
Matthew Wild <mwild1@gmail.com>
parents: 588
diff changeset
55 #include <string.h>
804
9bc1544c99b7 util.pposix: Add getuid/setuid (we don't use them yet)
Matthew Wild <mwild1@gmail.com>
parents: 796
diff changeset
56 #include <errno.h>
586
b828d7d47973 Add posix support library, and adjust makefiles for it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
57 #include "lua.h"
5044
4ef0dbfead53 util.pposix: Add fallocate method, backed by either posix_fallocate() or Linux fallocate()
Kim Alvefur <zash@zash.se>
parents: 4950
diff changeset
58 #include "lualib.h"
722
63456c9d0522 mod_posix: Support for logging to syslog (log = 'syslog' in config)
Matthew Wild <mwild1@gmail.com>
parents: 588
diff changeset
59 #include "lauxlib.h"
63456c9d0522 mod_posix: Support for logging to syslog (log = 'syslog' in config)
Matthew Wild <mwild1@gmail.com>
parents: 588
diff changeset
60
10799
763bb2ce3f60 util.pposix,signal: Pass around various OS numbers as integers [Lua 5.3]
Kim Alvefur <zash@zash.se>
parents: 10480
diff changeset
61 #if (LUA_VERSION_NUM < 503)
763bb2ce3f60 util.pposix,signal: Pass around various OS numbers as integers [Lua 5.3]
Kim Alvefur <zash@zash.se>
parents: 10480
diff changeset
62 #define lua_isinteger(L, n) lua_isnumber(L, n)
763bb2ce3f60 util.pposix,signal: Pass around various OS numbers as integers [Lua 5.3]
Kim Alvefur <zash@zash.se>
parents: 10480
diff changeset
63 #endif
10921
6eb5d2bb11af util-src: Use the luaL_pushfail API added in Lua 5.4 to highlight all failure conditions
Kim Alvefur <zash@zash.se>
parents: 10799
diff changeset
64 #if (LUA_VERSION_NUM < 504)
6eb5d2bb11af util-src: Use the luaL_pushfail API added in Lua 5.4 to highlight all failure conditions
Kim Alvefur <zash@zash.se>
parents: 10799
diff changeset
65 #define luaL_pushfail lua_pushnil
6eb5d2bb11af util-src: Use the luaL_pushfail API added in Lua 5.4 to highlight all failure conditions
Kim Alvefur <zash@zash.se>
parents: 10799
diff changeset
66 #endif
6413
a552f4170aed util-src/*.c: Add macro for compiling with Lua 5.2
Kim Alvefur <zash@zash.se>
parents: 6411
diff changeset
67
5044
4ef0dbfead53 util.pposix: Add fallocate method, backed by either posix_fallocate() or Linux fallocate()
Kim Alvefur <zash@zash.se>
parents: 4950
diff changeset
68 #include <fcntl.h>
7931
b619b85e01aa util.pposix, configure: Move _GNU_SOURCE macro into source files
Kim Alvefur <zash@zash.se>
parents: 7926
diff changeset
69 #if defined(__linux__)
5044
4ef0dbfead53 util.pposix: Add fallocate method, backed by either posix_fallocate() or Linux fallocate()
Kim Alvefur <zash@zash.se>
parents: 4950
diff changeset
70 #include <linux/falloc.h>
4ef0dbfead53 util.pposix: Add fallocate method, backed by either posix_fallocate() or Linux fallocate()
Kim Alvefur <zash@zash.se>
parents: 4950
diff changeset
71 #endif
4ef0dbfead53 util.pposix: Add fallocate method, backed by either posix_fallocate() or Linux fallocate()
Kim Alvefur <zash@zash.se>
parents: 4950
diff changeset
72
9277
fa6a6f921405 util.pposix: Restrict use of malloc_info to glibc
Kim Alvefur <zash@zash.se>
parents: 9276
diff changeset
73 #if !defined(WITHOUT_MALLINFO) && defined(__linux__) && defined(__GLIBC__)
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
74 #include <malloc.h>
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
75 #define WITH_MALLINFO
4946
2975c7008ccd util.pposix: Add meminfo() binding to memory allocation stats provided by mallinfo() [compilation tested on Ubuntu...]
Matthew Wild <mwild1@gmail.com>
parents: 4934
diff changeset
76 #endif
2975c7008ccd util.pposix: Add meminfo() binding to memory allocation stats provided by mallinfo() [compilation tested on Ubuntu...]
Matthew Wild <mwild1@gmail.com>
parents: 4934
diff changeset
77
7789
93dd90309779 util.pposix: rfork() seems to be FreeBSD only (fixes #412)
Kim Alvefur <zash@zash.se>
parents: 7440
diff changeset
78 #if defined(__FreeBSD__) && defined(RFPROC)
7440
5424e24cdcb1 util.pposix: Ask for shared file descriptor table using rfork() on *BSD (fixes #412)
Kim Alvefur <zash@zash.se>
parents: 6942
diff changeset
79 /*
7789
93dd90309779 util.pposix: rfork() seems to be FreeBSD only (fixes #412)
Kim Alvefur <zash@zash.se>
parents: 7440
diff changeset
80 * On FreeBSD, calling fork() is equivalent to rfork(RFPROC | RFFDG).
7440
5424e24cdcb1 util.pposix: Ask for shared file descriptor table using rfork() on *BSD (fixes #412)
Kim Alvefur <zash@zash.se>
parents: 6942
diff changeset
81 *
5424e24cdcb1 util.pposix: Ask for shared file descriptor table using rfork() on *BSD (fixes #412)
Kim Alvefur <zash@zash.se>
parents: 6942
diff changeset
82 * RFFDG being set means that the file descriptor table is copied,
5424e24cdcb1 util.pposix: Ask for shared file descriptor table using rfork() on *BSD (fixes #412)
Kim Alvefur <zash@zash.se>
parents: 6942
diff changeset
83 * otherwise it's shared. We want the later, otherwise libevent gets
5424e24cdcb1 util.pposix: Ask for shared file descriptor table using rfork() on *BSD (fixes #412)
Kim Alvefur <zash@zash.se>
parents: 6942
diff changeset
84 * messed up.
5424e24cdcb1 util.pposix: Ask for shared file descriptor table using rfork() on *BSD (fixes #412)
Kim Alvefur <zash@zash.se>
parents: 6942
diff changeset
85 *
5424e24cdcb1 util.pposix: Ask for shared file descriptor table using rfork() on *BSD (fixes #412)
Kim Alvefur <zash@zash.se>
parents: 6942
diff changeset
86 * See issue #412
5424e24cdcb1 util.pposix: Ask for shared file descriptor table using rfork() on *BSD (fixes #412)
Kim Alvefur <zash@zash.se>
parents: 6942
diff changeset
87 */
5424e24cdcb1 util.pposix: Ask for shared file descriptor table using rfork() on *BSD (fixes #412)
Kim Alvefur <zash@zash.se>
parents: 6942
diff changeset
88 #define fork() rfork(RFPROC)
5424e24cdcb1 util.pposix: Ask for shared file descriptor table using rfork() on *BSD (fixes #412)
Kim Alvefur <zash@zash.se>
parents: 6942
diff changeset
89 #endif
5424e24cdcb1 util.pposix: Ask for shared file descriptor table using rfork() on *BSD (fixes #412)
Kim Alvefur <zash@zash.se>
parents: 6942
diff changeset
90
722
63456c9d0522 mod_posix: Support for logging to syslog (log = 'syslog' in config)
Matthew Wild <mwild1@gmail.com>
parents: 588
diff changeset
91 /* Daemonization support */
586
b828d7d47973 Add posix support library, and adjust makefiles for it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
92
7889
b8d694646597 util-src/*.c: Attach pointer * to name instead of type
Kim Alvefur <zash@zash.se>
parents: 7835
diff changeset
93 static int lc_daemonize(lua_State *L) {
586
b828d7d47973 Add posix support library, and adjust makefiles for it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
94
b828d7d47973 Add posix support library, and adjust makefiles for it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
95 pid_t pid;
2436
ccc71b5d2e01 util.posix: Trailing whitespace
Matthew Wild <mwild1@gmail.com>
parents: 2060
diff changeset
96
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
97 if(getppid() == 1) {
586
b828d7d47973 Add posix support library, and adjust makefiles for it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
98 lua_pushboolean(L, 0);
b828d7d47973 Add posix support library, and adjust makefiles for it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
99 lua_pushstring(L, "already-daemonized");
b828d7d47973 Add posix support library, and adjust makefiles for it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
100 return 2;
b828d7d47973 Add posix support library, and adjust makefiles for it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
101 }
2436
ccc71b5d2e01 util.posix: Trailing whitespace
Matthew Wild <mwild1@gmail.com>
parents: 2060
diff changeset
102
586
b828d7d47973 Add posix support library, and adjust makefiles for it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
103 /* Attempt initial fork */
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
104 if((pid = fork()) < 0) {
586
b828d7d47973 Add posix support library, and adjust makefiles for it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
105 /* Forking failed */
b828d7d47973 Add posix support library, and adjust makefiles for it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
106 lua_pushboolean(L, 0);
b828d7d47973 Add posix support library, and adjust makefiles for it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
107 lua_pushstring(L, "fork-failed");
b828d7d47973 Add posix support library, and adjust makefiles for it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
108 return 2;
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
109 } else if(pid != 0) {
586
b828d7d47973 Add posix support library, and adjust makefiles for it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
110 /* We are the parent process */
b828d7d47973 Add posix support library, and adjust makefiles for it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
111 lua_pushboolean(L, 1);
10799
763bb2ce3f60 util.pposix,signal: Pass around various OS numbers as integers [Lua 5.3]
Kim Alvefur <zash@zash.se>
parents: 10480
diff changeset
112 lua_pushinteger(L, pid);
586
b828d7d47973 Add posix support library, and adjust makefiles for it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
113 return 2;
b828d7d47973 Add posix support library, and adjust makefiles for it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
114 }
2436
ccc71b5d2e01 util.posix: Trailing whitespace
Matthew Wild <mwild1@gmail.com>
parents: 2060
diff changeset
115
586
b828d7d47973 Add posix support library, and adjust makefiles for it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
116 /* and we are the child process */
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
117 if(setsid() == -1) {
586
b828d7d47973 Add posix support library, and adjust makefiles for it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
118 /* We failed to become session leader */
b828d7d47973 Add posix support library, and adjust makefiles for it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
119 /* (we probably already were) */
b828d7d47973 Add posix support library, and adjust makefiles for it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
120 lua_pushboolean(L, 0);
b828d7d47973 Add posix support library, and adjust makefiles for it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
121 lua_pushstring(L, "setsid-failed");
b828d7d47973 Add posix support library, and adjust makefiles for it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
122 return 2;
b828d7d47973 Add posix support library, and adjust makefiles for it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
123 }
b828d7d47973 Add posix support library, and adjust makefiles for it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
124
5176
7d0a8b255a37 util.pposix: Prevent FDs 0, 1 and 2 from being assigned to connections
Kim Alvefur <zash@zash.se>
parents: 5068
diff changeset
125 /* Make sure accidental use of FDs 0, 1, 2 don't cause weirdness */
9276
3a13c246b877 util.pposix: Do not attempt to assign to stdio variables [pedantic]
Kim Alvefur <zash@zash.se>
parents: 9152
diff changeset
126 freopen("/dev/null", "r", stdin);
3a13c246b877 util.pposix: Do not attempt to assign to stdio variables [pedantic]
Kim Alvefur <zash@zash.se>
parents: 9152
diff changeset
127 freopen("/dev/null", "w", stdout);
3a13c246b877 util.pposix: Do not attempt to assign to stdio variables [pedantic]
Kim Alvefur <zash@zash.se>
parents: 9152
diff changeset
128 freopen("/dev/null", "w", stderr);
1195
6b91a2b39680 Close std{in,out,err} when daemonizing
Matthew Wild <mwild1@gmail.com>
parents: 896
diff changeset
129
586
b828d7d47973 Add posix support library, and adjust makefiles for it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
130 /* Final fork, use it wisely */
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
131 if(fork()) {
586
b828d7d47973 Add posix support library, and adjust makefiles for it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
132 exit(0);
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
133 }
586
b828d7d47973 Add posix support library, and adjust makefiles for it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
134
b828d7d47973 Add posix support library, and adjust makefiles for it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
135 /* Show's over, let's continue */
b828d7d47973 Add posix support library, and adjust makefiles for it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
136 lua_pushboolean(L, 1);
b828d7d47973 Add posix support library, and adjust makefiles for it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
137 lua_pushnil(L);
b828d7d47973 Add posix support library, and adjust makefiles for it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
138 return 2;
b828d7d47973 Add posix support library, and adjust makefiles for it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
139 }
b828d7d47973 Add posix support library, and adjust makefiles for it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
140
722
63456c9d0522 mod_posix: Support for logging to syslog (log = 'syslog' in config)
Matthew Wild <mwild1@gmail.com>
parents: 588
diff changeset
141 /* Syslog support */
63456c9d0522 mod_posix: Support for logging to syslog (log = 'syslog' in config)
Matthew Wild <mwild1@gmail.com>
parents: 588
diff changeset
142
10480
94cacf9fd0ae util.*.c: Add static qualifiers everywhere
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 10411
diff changeset
143 static const char *const facility_strings[] = {
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
144 "auth",
1842
8337c0d4aee4 util.pposix: Compatibility with Solaris systems (thanks Filip)
Matthew Wild <mwild1@gmail.com>
parents: 1579
diff changeset
145 #if !(defined(sun) || defined(__sun))
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
146 "authpriv",
1842
8337c0d4aee4 util.pposix: Compatibility with Solaris systems (thanks Filip)
Matthew Wild <mwild1@gmail.com>
parents: 1579
diff changeset
147 #endif
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
148 "cron",
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
149 "daemon",
1842
8337c0d4aee4 util.pposix: Compatibility with Solaris systems (thanks Filip)
Matthew Wild <mwild1@gmail.com>
parents: 1579
diff changeset
150 #if !(defined(sun) || defined(__sun))
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
151 "ftp",
1842
8337c0d4aee4 util.pposix: Compatibility with Solaris systems (thanks Filip)
Matthew Wild <mwild1@gmail.com>
parents: 1579
diff changeset
152 #endif
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
153 "kern",
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
154 "local0",
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
155 "local1",
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
156 "local2",
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
157 "local3",
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
158 "local4",
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
159 "local5",
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
160 "local6",
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
161 "local7",
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
162 "lpr",
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
163 "mail",
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
164 "syslog",
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
165 "user",
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
166 "uucp",
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
167 NULL
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
168 };
10480
94cacf9fd0ae util.*.c: Add static qualifiers everywhere
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 10411
diff changeset
169 static int facility_constants[] = {
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
170 LOG_AUTH,
1842
8337c0d4aee4 util.pposix: Compatibility with Solaris systems (thanks Filip)
Matthew Wild <mwild1@gmail.com>
parents: 1579
diff changeset
171 #if !(defined(sun) || defined(__sun))
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
172 LOG_AUTHPRIV,
1842
8337c0d4aee4 util.pposix: Compatibility with Solaris systems (thanks Filip)
Matthew Wild <mwild1@gmail.com>
parents: 1579
diff changeset
173 #endif
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
174 LOG_CRON,
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
175 LOG_DAEMON,
1842
8337c0d4aee4 util.pposix: Compatibility with Solaris systems (thanks Filip)
Matthew Wild <mwild1@gmail.com>
parents: 1579
diff changeset
176 #if !(defined(sun) || defined(__sun))
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
177 LOG_FTP,
1842
8337c0d4aee4 util.pposix: Compatibility with Solaris systems (thanks Filip)
Matthew Wild <mwild1@gmail.com>
parents: 1579
diff changeset
178 #endif
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
179 LOG_KERN,
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
180 LOG_LOCAL0,
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
181 LOG_LOCAL1,
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
182 LOG_LOCAL2,
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
183 LOG_LOCAL3,
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
184 LOG_LOCAL4,
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
185 LOG_LOCAL5,
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
186 LOG_LOCAL6,
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
187 LOG_LOCAL7,
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
188 LOG_LPR,
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
189 LOG_MAIL,
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
190 LOG_NEWS,
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
191 LOG_SYSLOG,
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
192 LOG_USER,
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
193 LOG_UUCP,
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
194 -1
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
195 };
722
63456c9d0522 mod_posix: Support for logging to syslog (log = 'syslog' in config)
Matthew Wild <mwild1@gmail.com>
parents: 588
diff changeset
196
63456c9d0522 mod_posix: Support for logging to syslog (log = 'syslog' in config)
Matthew Wild <mwild1@gmail.com>
parents: 588
diff changeset
197 /* "
63456c9d0522 mod_posix: Support for logging to syslog (log = 'syslog' in config)
Matthew Wild <mwild1@gmail.com>
parents: 588
diff changeset
198 The parameter ident in the call of openlog() is probably stored as-is.
63456c9d0522 mod_posix: Support for logging to syslog (log = 'syslog' in config)
Matthew Wild <mwild1@gmail.com>
parents: 588
diff changeset
199 Thus, if the string it points to is changed, syslog() may start
63456c9d0522 mod_posix: Support for logging to syslog (log = 'syslog' in config)
Matthew Wild <mwild1@gmail.com>
parents: 588
diff changeset
200 prepending the changed string, and if the string it points to ceases to
63456c9d0522 mod_posix: Support for logging to syslog (log = 'syslog' in config)
Matthew Wild <mwild1@gmail.com>
parents: 588
diff changeset
201 exist, the results are undefined. Most portable is to use a string
63456c9d0522 mod_posix: Support for logging to syslog (log = 'syslog' in config)
Matthew Wild <mwild1@gmail.com>
parents: 588
diff changeset
202 constant.
63456c9d0522 mod_posix: Support for logging to syslog (log = 'syslog' in config)
Matthew Wild <mwild1@gmail.com>
parents: 588
diff changeset
203 " -- syslog manpage
2436
ccc71b5d2e01 util.posix: Trailing whitespace
Matthew Wild <mwild1@gmail.com>
parents: 2060
diff changeset
204 */
10480
94cacf9fd0ae util.*.c: Add static qualifiers everywhere
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 10411
diff changeset
205 static char *syslog_ident = NULL;
722
63456c9d0522 mod_posix: Support for logging to syslog (log = 'syslog' in config)
Matthew Wild <mwild1@gmail.com>
parents: 588
diff changeset
206
10480
94cacf9fd0ae util.*.c: Add static qualifiers everywhere
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 10411
diff changeset
207 static int lc_syslog_open(lua_State *L) {
796
63f56696c66c util.pposix: Fix incompatible pointer type compiler warnings
Matthew Wild <mwild1@gmail.com>
parents: 766
diff changeset
208 int facility = luaL_checkoption(L, 2, "daemon", facility_strings);
722
63456c9d0522 mod_posix: Support for logging to syslog (log = 'syslog' in config)
Matthew Wild <mwild1@gmail.com>
parents: 588
diff changeset
209 facility = facility_constants[facility];
63456c9d0522 mod_posix: Support for logging to syslog (log = 'syslog' in config)
Matthew Wild <mwild1@gmail.com>
parents: 588
diff changeset
210
63456c9d0522 mod_posix: Support for logging to syslog (log = 'syslog' in config)
Matthew Wild <mwild1@gmail.com>
parents: 588
diff changeset
211 luaL_checkstring(L, 1);
2436
ccc71b5d2e01 util.posix: Trailing whitespace
Matthew Wild <mwild1@gmail.com>
parents: 2060
diff changeset
212
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
213 if(syslog_ident) {
722
63456c9d0522 mod_posix: Support for logging to syslog (log = 'syslog' in config)
Matthew Wild <mwild1@gmail.com>
parents: 588
diff changeset
214 free(syslog_ident);
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
215 }
2436
ccc71b5d2e01 util.posix: Trailing whitespace
Matthew Wild <mwild1@gmail.com>
parents: 2060
diff changeset
216
722
63456c9d0522 mod_posix: Support for logging to syslog (log = 'syslog' in config)
Matthew Wild <mwild1@gmail.com>
parents: 588
diff changeset
217 syslog_ident = strdup(lua_tostring(L, 1));
2436
ccc71b5d2e01 util.posix: Trailing whitespace
Matthew Wild <mwild1@gmail.com>
parents: 2060
diff changeset
218
722
63456c9d0522 mod_posix: Support for logging to syslog (log = 'syslog' in config)
Matthew Wild <mwild1@gmail.com>
parents: 588
diff changeset
219 openlog(syslog_ident, LOG_PID, facility);
63456c9d0522 mod_posix: Support for logging to syslog (log = 'syslog' in config)
Matthew Wild <mwild1@gmail.com>
parents: 588
diff changeset
220 return 0;
63456c9d0522 mod_posix: Support for logging to syslog (log = 'syslog' in config)
Matthew Wild <mwild1@gmail.com>
parents: 588
diff changeset
221 }
63456c9d0522 mod_posix: Support for logging to syslog (log = 'syslog' in config)
Matthew Wild <mwild1@gmail.com>
parents: 588
diff changeset
222
10480
94cacf9fd0ae util.*.c: Add static qualifiers everywhere
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 10411
diff changeset
223 static const char *const level_strings[] = {
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
224 "debug",
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
225 "info",
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
226 "notice",
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
227 "warn",
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
228 "error",
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
229 NULL
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
230 };
10480
94cacf9fd0ae util.*.c: Add static qualifiers everywhere
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 10411
diff changeset
231 static int level_constants[] = {
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
232 LOG_DEBUG,
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
233 LOG_INFO,
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
234 LOG_NOTICE,
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
235 LOG_WARNING,
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
236 LOG_CRIT,
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
237 -1
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
238 };
10480
94cacf9fd0ae util.*.c: Add static qualifiers everywhere
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 10411
diff changeset
239 static int lc_syslog_log(lua_State *L) {
5449
35a271b4b920 util.pposix: syslog(): Support an optional source parameter (producing messages of the form '<source>: <message>'
Matthew Wild <mwild1@gmail.com>
parents: 5359
diff changeset
240 int level = level_constants[luaL_checkoption(L, 1, "notice", level_strings)];
722
63456c9d0522 mod_posix: Support for logging to syslog (log = 'syslog' in config)
Matthew Wild <mwild1@gmail.com>
parents: 588
diff changeset
241
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
242 if(lua_gettop(L) == 3) {
5449
35a271b4b920 util.pposix: syslog(): Support an optional source parameter (producing messages of the form '<source>: <message>'
Matthew Wild <mwild1@gmail.com>
parents: 5359
diff changeset
243 syslog(level, "%s: %s", luaL_checkstring(L, 2), luaL_checkstring(L, 3));
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
244 } else {
5449
35a271b4b920 util.pposix: syslog(): Support an optional source parameter (producing messages of the form '<source>: <message>'
Matthew Wild <mwild1@gmail.com>
parents: 5359
diff changeset
245 syslog(level, "%s", lua_tostring(L, 2));
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
246 }
722
63456c9d0522 mod_posix: Support for logging to syslog (log = 'syslog' in config)
Matthew Wild <mwild1@gmail.com>
parents: 588
diff changeset
247
63456c9d0522 mod_posix: Support for logging to syslog (log = 'syslog' in config)
Matthew Wild <mwild1@gmail.com>
parents: 588
diff changeset
248 return 0;
63456c9d0522 mod_posix: Support for logging to syslog (log = 'syslog' in config)
Matthew Wild <mwild1@gmail.com>
parents: 588
diff changeset
249 }
63456c9d0522 mod_posix: Support for logging to syslog (log = 'syslog' in config)
Matthew Wild <mwild1@gmail.com>
parents: 588
diff changeset
250
10480
94cacf9fd0ae util.*.c: Add static qualifiers everywhere
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 10411
diff changeset
251 static int lc_syslog_close(lua_State *L) {
9151
fee3933ff346 pposix, signal: Ignore unused arguments.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 9150
diff changeset
252 (void)L;
722
63456c9d0522 mod_posix: Support for logging to syslog (log = 'syslog' in config)
Matthew Wild <mwild1@gmail.com>
parents: 588
diff changeset
253 closelog();
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
254
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
255 if(syslog_ident) {
722
63456c9d0522 mod_posix: Support for logging to syslog (log = 'syslog' in config)
Matthew Wild <mwild1@gmail.com>
parents: 588
diff changeset
256 free(syslog_ident);
63456c9d0522 mod_posix: Support for logging to syslog (log = 'syslog' in config)
Matthew Wild <mwild1@gmail.com>
parents: 588
diff changeset
257 syslog_ident = NULL;
63456c9d0522 mod_posix: Support for logging to syslog (log = 'syslog' in config)
Matthew Wild <mwild1@gmail.com>
parents: 588
diff changeset
258 }
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
259
722
63456c9d0522 mod_posix: Support for logging to syslog (log = 'syslog' in config)
Matthew Wild <mwild1@gmail.com>
parents: 588
diff changeset
260 return 0;
63456c9d0522 mod_posix: Support for logging to syslog (log = 'syslog' in config)
Matthew Wild <mwild1@gmail.com>
parents: 588
diff changeset
261 }
63456c9d0522 mod_posix: Support for logging to syslog (log = 'syslog' in config)
Matthew Wild <mwild1@gmail.com>
parents: 588
diff changeset
262
10480
94cacf9fd0ae util.*.c: Add static qualifiers everywhere
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 10411
diff changeset
263 static int lc_syslog_setmask(lua_State *L) {
796
63f56696c66c util.pposix: Fix incompatible pointer type compiler warnings
Matthew Wild <mwild1@gmail.com>
parents: 766
diff changeset
264 int level_idx = luaL_checkoption(L, 1, "notice", level_strings);
729
f62ef65d5c01 pposix: Add syslog_setmask (use config: minimum_log_level = 'warn' etc.)
Matthew Wild <mwild1@gmail.com>
parents: 727
diff changeset
265 int mask = 0;
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
266
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
267 do {
729
f62ef65d5c01 pposix: Add syslog_setmask (use config: minimum_log_level = 'warn' etc.)
Matthew Wild <mwild1@gmail.com>
parents: 727
diff changeset
268 mask |= LOG_MASK(level_constants[level_idx]);
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
269 } while(++level_idx <= 4);
729
f62ef65d5c01 pposix: Add syslog_setmask (use config: minimum_log_level = 'warn' etc.)
Matthew Wild <mwild1@gmail.com>
parents: 727
diff changeset
270
f62ef65d5c01 pposix: Add syslog_setmask (use config: minimum_log_level = 'warn' etc.)
Matthew Wild <mwild1@gmail.com>
parents: 727
diff changeset
271 setlogmask(mask);
f62ef65d5c01 pposix: Add syslog_setmask (use config: minimum_log_level = 'warn' etc.)
Matthew Wild <mwild1@gmail.com>
parents: 727
diff changeset
272 return 0;
f62ef65d5c01 pposix: Add syslog_setmask (use config: minimum_log_level = 'warn' etc.)
Matthew Wild <mwild1@gmail.com>
parents: 727
diff changeset
273 }
f62ef65d5c01 pposix: Add syslog_setmask (use config: minimum_log_level = 'warn' etc.)
Matthew Wild <mwild1@gmail.com>
parents: 727
diff changeset
274
723
c1e7d280c174 mod_posix/pposix: Fix reporting of incorrect PID on daemonization. Log correct PID, and support writing a pidfile (pidfile = '/path/to/prosody.pid' in config). Added getpid() to pposix and improved function names.
Matthew Wild <mwild1@gmail.com>
parents: 722
diff changeset
275 /* getpid */
c1e7d280c174 mod_posix/pposix: Fix reporting of incorrect PID on daemonization. Log correct PID, and support writing a pidfile (pidfile = '/path/to/prosody.pid' in config). Added getpid() to pposix and improved function names.
Matthew Wild <mwild1@gmail.com>
parents: 722
diff changeset
276
10480
94cacf9fd0ae util.*.c: Add static qualifiers everywhere
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 10411
diff changeset
277 static int lc_getpid(lua_State *L) {
723
c1e7d280c174 mod_posix/pposix: Fix reporting of incorrect PID on daemonization. Log correct PID, and support writing a pidfile (pidfile = '/path/to/prosody.pid' in config). Added getpid() to pposix and improved function names.
Matthew Wild <mwild1@gmail.com>
parents: 722
diff changeset
278 lua_pushinteger(L, getpid());
c1e7d280c174 mod_posix/pposix: Fix reporting of incorrect PID on daemonization. Log correct PID, and support writing a pidfile (pidfile = '/path/to/prosody.pid' in config). Added getpid() to pposix and improved function names.
Matthew Wild <mwild1@gmail.com>
parents: 722
diff changeset
279 return 1;
c1e7d280c174 mod_posix/pposix: Fix reporting of incorrect PID on daemonization. Log correct PID, and support writing a pidfile (pidfile = '/path/to/prosody.pid' in config). Added getpid() to pposix and improved function names.
Matthew Wild <mwild1@gmail.com>
parents: 722
diff changeset
280 }
c1e7d280c174 mod_posix/pposix: Fix reporting of incorrect PID on daemonization. Log correct PID, and support writing a pidfile (pidfile = '/path/to/prosody.pid' in config). Added getpid() to pposix and improved function names.
Matthew Wild <mwild1@gmail.com>
parents: 722
diff changeset
281
804
9bc1544c99b7 util.pposix: Add getuid/setuid (we don't use them yet)
Matthew Wild <mwild1@gmail.com>
parents: 796
diff changeset
282 /* UID/GID functions */
9bc1544c99b7 util.pposix: Add getuid/setuid (we don't use them yet)
Matthew Wild <mwild1@gmail.com>
parents: 796
diff changeset
283
10480
94cacf9fd0ae util.*.c: Add static qualifiers everywhere
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 10411
diff changeset
284 static int lc_getuid(lua_State *L) {
804
9bc1544c99b7 util.pposix: Add getuid/setuid (we don't use them yet)
Matthew Wild <mwild1@gmail.com>
parents: 796
diff changeset
285 lua_pushinteger(L, getuid());
9bc1544c99b7 util.pposix: Add getuid/setuid (we don't use them yet)
Matthew Wild <mwild1@gmail.com>
parents: 796
diff changeset
286 return 1;
9bc1544c99b7 util.pposix: Add getuid/setuid (we don't use them yet)
Matthew Wild <mwild1@gmail.com>
parents: 796
diff changeset
287 }
9bc1544c99b7 util.pposix: Add getuid/setuid (we don't use them yet)
Matthew Wild <mwild1@gmail.com>
parents: 796
diff changeset
288
10480
94cacf9fd0ae util.*.c: Add static qualifiers everywhere
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 10411
diff changeset
289 static int lc_getgid(lua_State *L) {
804
9bc1544c99b7 util.pposix: Add getuid/setuid (we don't use them yet)
Matthew Wild <mwild1@gmail.com>
parents: 796
diff changeset
290 lua_pushinteger(L, getgid());
9bc1544c99b7 util.pposix: Add getuid/setuid (we don't use them yet)
Matthew Wild <mwild1@gmail.com>
parents: 796
diff changeset
291 return 1;
9bc1544c99b7 util.pposix: Add getuid/setuid (we don't use them yet)
Matthew Wild <mwild1@gmail.com>
parents: 796
diff changeset
292 }
9bc1544c99b7 util.pposix: Add getuid/setuid (we don't use them yet)
Matthew Wild <mwild1@gmail.com>
parents: 796
diff changeset
293
10480
94cacf9fd0ae util.*.c: Add static qualifiers everywhere
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 10411
diff changeset
294 static int lc_setuid(lua_State *L) {
804
9bc1544c99b7 util.pposix: Add getuid/setuid (we don't use them yet)
Matthew Wild <mwild1@gmail.com>
parents: 796
diff changeset
295 int uid = -1;
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
296
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
297 if(lua_gettop(L) < 1) {
804
9bc1544c99b7 util.pposix: Add getuid/setuid (we don't use them yet)
Matthew Wild <mwild1@gmail.com>
parents: 796
diff changeset
298 return 0;
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
299 }
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
300
10799
763bb2ce3f60 util.pposix,signal: Pass around various OS numbers as integers [Lua 5.3]
Kim Alvefur <zash@zash.se>
parents: 10480
diff changeset
301 if(!lua_isinteger(L, 1) && lua_tostring(L, 1)) {
804
9bc1544c99b7 util.pposix: Add getuid/setuid (we don't use them yet)
Matthew Wild <mwild1@gmail.com>
parents: 796
diff changeset
302 /* Passed UID is actually a string, so look up the UID */
7889
b8d694646597 util-src/*.c: Attach pointer * to name instead of type
Kim Alvefur <zash@zash.se>
parents: 7835
diff changeset
303 struct passwd *p;
804
9bc1544c99b7 util.pposix: Add getuid/setuid (we don't use them yet)
Matthew Wild <mwild1@gmail.com>
parents: 796
diff changeset
304 p = getpwnam(lua_tostring(L, 1));
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
305
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
306 if(!p) {
804
9bc1544c99b7 util.pposix: Add getuid/setuid (we don't use them yet)
Matthew Wild <mwild1@gmail.com>
parents: 796
diff changeset
307 lua_pushboolean(L, 0);
9bc1544c99b7 util.pposix: Add getuid/setuid (we don't use them yet)
Matthew Wild <mwild1@gmail.com>
parents: 796
diff changeset
308 lua_pushstring(L, "no-such-user");
9bc1544c99b7 util.pposix: Add getuid/setuid (we don't use them yet)
Matthew Wild <mwild1@gmail.com>
parents: 796
diff changeset
309 return 2;
9bc1544c99b7 util.pposix: Add getuid/setuid (we don't use them yet)
Matthew Wild <mwild1@gmail.com>
parents: 796
diff changeset
310 }
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
311
804
9bc1544c99b7 util.pposix: Add getuid/setuid (we don't use them yet)
Matthew Wild <mwild1@gmail.com>
parents: 796
diff changeset
312 uid = p->pw_uid;
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
313 } else {
10799
763bb2ce3f60 util.pposix,signal: Pass around various OS numbers as integers [Lua 5.3]
Kim Alvefur <zash@zash.se>
parents: 10480
diff changeset
314 uid = lua_tointeger(L, 1);
804
9bc1544c99b7 util.pposix: Add getuid/setuid (we don't use them yet)
Matthew Wild <mwild1@gmail.com>
parents: 796
diff changeset
315 }
2436
ccc71b5d2e01 util.posix: Trailing whitespace
Matthew Wild <mwild1@gmail.com>
parents: 2060
diff changeset
316
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
317 if(uid > -1) {
804
9bc1544c99b7 util.pposix: Add getuid/setuid (we don't use them yet)
Matthew Wild <mwild1@gmail.com>
parents: 796
diff changeset
318 /* Ok, attempt setuid */
9bc1544c99b7 util.pposix: Add getuid/setuid (we don't use them yet)
Matthew Wild <mwild1@gmail.com>
parents: 796
diff changeset
319 errno = 0;
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
320
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
321 if(setuid(uid)) {
804
9bc1544c99b7 util.pposix: Add getuid/setuid (we don't use them yet)
Matthew Wild <mwild1@gmail.com>
parents: 796
diff changeset
322 /* Fail */
9bc1544c99b7 util.pposix: Add getuid/setuid (we don't use them yet)
Matthew Wild <mwild1@gmail.com>
parents: 796
diff changeset
323 lua_pushboolean(L, 0);
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
324
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
325 switch(errno) {
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
326 case EINVAL:
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
327 lua_pushstring(L, "invalid-uid");
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
328 break;
7889
b8d694646597 util-src/*.c: Attach pointer * to name instead of type
Kim Alvefur <zash@zash.se>
parents: 7835
diff changeset
329
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
330 case EPERM:
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
331 lua_pushstring(L, "permission-denied");
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
332 break;
7889
b8d694646597 util-src/*.c: Attach pointer * to name instead of type
Kim Alvefur <zash@zash.se>
parents: 7835
diff changeset
333
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
334 default:
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
335 lua_pushstring(L, "unknown-error");
804
9bc1544c99b7 util.pposix: Add getuid/setuid (we don't use them yet)
Matthew Wild <mwild1@gmail.com>
parents: 796
diff changeset
336 }
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
337
804
9bc1544c99b7 util.pposix: Add getuid/setuid (we don't use them yet)
Matthew Wild <mwild1@gmail.com>
parents: 796
diff changeset
338 return 2;
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
339 } else {
804
9bc1544c99b7 util.pposix: Add getuid/setuid (we don't use them yet)
Matthew Wild <mwild1@gmail.com>
parents: 796
diff changeset
340 /* Success! */
9bc1544c99b7 util.pposix: Add getuid/setuid (we don't use them yet)
Matthew Wild <mwild1@gmail.com>
parents: 796
diff changeset
341 lua_pushboolean(L, 1);
9bc1544c99b7 util.pposix: Add getuid/setuid (we don't use them yet)
Matthew Wild <mwild1@gmail.com>
parents: 796
diff changeset
342 return 1;
9bc1544c99b7 util.pposix: Add getuid/setuid (we don't use them yet)
Matthew Wild <mwild1@gmail.com>
parents: 796
diff changeset
343 }
9bc1544c99b7 util.pposix: Add getuid/setuid (we don't use them yet)
Matthew Wild <mwild1@gmail.com>
parents: 796
diff changeset
344 }
2436
ccc71b5d2e01 util.posix: Trailing whitespace
Matthew Wild <mwild1@gmail.com>
parents: 2060
diff changeset
345
804
9bc1544c99b7 util.pposix: Add getuid/setuid (we don't use them yet)
Matthew Wild <mwild1@gmail.com>
parents: 796
diff changeset
346 /* Seems we couldn't find a valid UID to switch to */
9bc1544c99b7 util.pposix: Add getuid/setuid (we don't use them yet)
Matthew Wild <mwild1@gmail.com>
parents: 796
diff changeset
347 lua_pushboolean(L, 0);
9bc1544c99b7 util.pposix: Add getuid/setuid (we don't use them yet)
Matthew Wild <mwild1@gmail.com>
parents: 796
diff changeset
348 lua_pushstring(L, "invalid-uid");
9bc1544c99b7 util.pposix: Add getuid/setuid (we don't use them yet)
Matthew Wild <mwild1@gmail.com>
parents: 796
diff changeset
349 return 2;
9bc1544c99b7 util.pposix: Add getuid/setuid (we don't use them yet)
Matthew Wild <mwild1@gmail.com>
parents: 796
diff changeset
350 }
9bc1544c99b7 util.pposix: Add getuid/setuid (we don't use them yet)
Matthew Wild <mwild1@gmail.com>
parents: 796
diff changeset
351
10480
94cacf9fd0ae util.*.c: Add static qualifiers everywhere
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 10411
diff changeset
352 static int lc_setgid(lua_State *L) {
1578
5bd8b3bdbfbc pposix: Add setgid() function
Matthew Wild <mwild1@gmail.com>
parents: 1565
diff changeset
353 int gid = -1;
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
354
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
355 if(lua_gettop(L) < 1) {
1578
5bd8b3bdbfbc pposix: Add setgid() function
Matthew Wild <mwild1@gmail.com>
parents: 1565
diff changeset
356 return 0;
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
357 }
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
358
10799
763bb2ce3f60 util.pposix,signal: Pass around various OS numbers as integers [Lua 5.3]
Kim Alvefur <zash@zash.se>
parents: 10480
diff changeset
359 if(!lua_isinteger(L, 1) && lua_tostring(L, 1)) {
1578
5bd8b3bdbfbc pposix: Add setgid() function
Matthew Wild <mwild1@gmail.com>
parents: 1565
diff changeset
360 /* Passed GID is actually a string, so look up the GID */
7889
b8d694646597 util-src/*.c: Attach pointer * to name instead of type
Kim Alvefur <zash@zash.se>
parents: 7835
diff changeset
361 struct group *g;
1578
5bd8b3bdbfbc pposix: Add setgid() function
Matthew Wild <mwild1@gmail.com>
parents: 1565
diff changeset
362 g = getgrnam(lua_tostring(L, 1));
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
363
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
364 if(!g) {
1578
5bd8b3bdbfbc pposix: Add setgid() function
Matthew Wild <mwild1@gmail.com>
parents: 1565
diff changeset
365 lua_pushboolean(L, 0);
5bd8b3bdbfbc pposix: Add setgid() function
Matthew Wild <mwild1@gmail.com>
parents: 1565
diff changeset
366 lua_pushstring(L, "no-such-group");
5bd8b3bdbfbc pposix: Add setgid() function
Matthew Wild <mwild1@gmail.com>
parents: 1565
diff changeset
367 return 2;
5bd8b3bdbfbc pposix: Add setgid() function
Matthew Wild <mwild1@gmail.com>
parents: 1565
diff changeset
368 }
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
369
1578
5bd8b3bdbfbc pposix: Add setgid() function
Matthew Wild <mwild1@gmail.com>
parents: 1565
diff changeset
370 gid = g->gr_gid;
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
371 } else {
10799
763bb2ce3f60 util.pposix,signal: Pass around various OS numbers as integers [Lua 5.3]
Kim Alvefur <zash@zash.se>
parents: 10480
diff changeset
372 gid = lua_tointeger(L, 1);
1578
5bd8b3bdbfbc pposix: Add setgid() function
Matthew Wild <mwild1@gmail.com>
parents: 1565
diff changeset
373 }
2436
ccc71b5d2e01 util.posix: Trailing whitespace
Matthew Wild <mwild1@gmail.com>
parents: 2060
diff changeset
374
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
375 if(gid > -1) {
1578
5bd8b3bdbfbc pposix: Add setgid() function
Matthew Wild <mwild1@gmail.com>
parents: 1565
diff changeset
376 /* Ok, attempt setgid */
5bd8b3bdbfbc pposix: Add setgid() function
Matthew Wild <mwild1@gmail.com>
parents: 1565
diff changeset
377 errno = 0;
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
378
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
379 if(setgid(gid)) {
1578
5bd8b3bdbfbc pposix: Add setgid() function
Matthew Wild <mwild1@gmail.com>
parents: 1565
diff changeset
380 /* Fail */
5bd8b3bdbfbc pposix: Add setgid() function
Matthew Wild <mwild1@gmail.com>
parents: 1565
diff changeset
381 lua_pushboolean(L, 0);
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
382
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
383 switch(errno) {
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
384 case EINVAL:
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
385 lua_pushstring(L, "invalid-gid");
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
386 break;
7889
b8d694646597 util-src/*.c: Attach pointer * to name instead of type
Kim Alvefur <zash@zash.se>
parents: 7835
diff changeset
387
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
388 case EPERM:
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
389 lua_pushstring(L, "permission-denied");
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
390 break;
7889
b8d694646597 util-src/*.c: Attach pointer * to name instead of type
Kim Alvefur <zash@zash.se>
parents: 7835
diff changeset
391
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
392 default:
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
393 lua_pushstring(L, "unknown-error");
1578
5bd8b3bdbfbc pposix: Add setgid() function
Matthew Wild <mwild1@gmail.com>
parents: 1565
diff changeset
394 }
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
395
1578
5bd8b3bdbfbc pposix: Add setgid() function
Matthew Wild <mwild1@gmail.com>
parents: 1565
diff changeset
396 return 2;
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
397 } else {
1578
5bd8b3bdbfbc pposix: Add setgid() function
Matthew Wild <mwild1@gmail.com>
parents: 1565
diff changeset
398 /* Success! */
5bd8b3bdbfbc pposix: Add setgid() function
Matthew Wild <mwild1@gmail.com>
parents: 1565
diff changeset
399 lua_pushboolean(L, 1);
5bd8b3bdbfbc pposix: Add setgid() function
Matthew Wild <mwild1@gmail.com>
parents: 1565
diff changeset
400 return 1;
5bd8b3bdbfbc pposix: Add setgid() function
Matthew Wild <mwild1@gmail.com>
parents: 1565
diff changeset
401 }
5bd8b3bdbfbc pposix: Add setgid() function
Matthew Wild <mwild1@gmail.com>
parents: 1565
diff changeset
402 }
2436
ccc71b5d2e01 util.posix: Trailing whitespace
Matthew Wild <mwild1@gmail.com>
parents: 2060
diff changeset
403
1578
5bd8b3bdbfbc pposix: Add setgid() function
Matthew Wild <mwild1@gmail.com>
parents: 1565
diff changeset
404 /* Seems we couldn't find a valid GID to switch to */
5bd8b3bdbfbc pposix: Add setgid() function
Matthew Wild <mwild1@gmail.com>
parents: 1565
diff changeset
405 lua_pushboolean(L, 0);
5bd8b3bdbfbc pposix: Add setgid() function
Matthew Wild <mwild1@gmail.com>
parents: 1565
diff changeset
406 lua_pushstring(L, "invalid-gid");
5bd8b3bdbfbc pposix: Add setgid() function
Matthew Wild <mwild1@gmail.com>
parents: 1565
diff changeset
407 return 2;
5bd8b3bdbfbc pposix: Add setgid() function
Matthew Wild <mwild1@gmail.com>
parents: 1565
diff changeset
408 }
5bd8b3bdbfbc pposix: Add setgid() function
Matthew Wild <mwild1@gmail.com>
parents: 1565
diff changeset
409
10480
94cacf9fd0ae util.*.c: Add static qualifiers everywhere
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 10411
diff changeset
410 static int lc_initgroups(lua_State *L) {
3471
482275e38224 util.pposix, prosodyctl, mod_posix: Add initgroups() function, and bump module version. prosodyctl inits groups with the groups of prosody_user. (thanks dbb)
Matthew Wild <mwild1@gmail.com>
parents: 2925
diff changeset
411 int ret;
482275e38224 util.pposix, prosodyctl, mod_posix: Add initgroups() function, and bump module version. prosodyctl inits groups with the groups of prosody_user. (thanks dbb)
Matthew Wild <mwild1@gmail.com>
parents: 2925
diff changeset
412 gid_t gid;
7889
b8d694646597 util-src/*.c: Attach pointer * to name instead of type
Kim Alvefur <zash@zash.se>
parents: 7835
diff changeset
413 struct passwd *p;
3471
482275e38224 util.pposix, prosodyctl, mod_posix: Add initgroups() function, and bump module version. prosodyctl inits groups with the groups of prosody_user. (thanks dbb)
Matthew Wild <mwild1@gmail.com>
parents: 2925
diff changeset
414
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
415 if(!lua_isstring(L, 1)) {
10921
6eb5d2bb11af util-src: Use the luaL_pushfail API added in Lua 5.4 to highlight all failure conditions
Kim Alvefur <zash@zash.se>
parents: 10799
diff changeset
416 luaL_pushfail(L);
3471
482275e38224 util.pposix, prosodyctl, mod_posix: Add initgroups() function, and bump module version. prosodyctl inits groups with the groups of prosody_user. (thanks dbb)
Matthew Wild <mwild1@gmail.com>
parents: 2925
diff changeset
417 lua_pushstring(L, "invalid-username");
482275e38224 util.pposix, prosodyctl, mod_posix: Add initgroups() function, and bump module version. prosodyctl inits groups with the groups of prosody_user. (thanks dbb)
Matthew Wild <mwild1@gmail.com>
parents: 2925
diff changeset
418 return 2;
482275e38224 util.pposix, prosodyctl, mod_posix: Add initgroups() function, and bump module version. prosodyctl inits groups with the groups of prosody_user. (thanks dbb)
Matthew Wild <mwild1@gmail.com>
parents: 2925
diff changeset
419 }
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
420
3471
482275e38224 util.pposix, prosodyctl, mod_posix: Add initgroups() function, and bump module version. prosodyctl inits groups with the groups of prosody_user. (thanks dbb)
Matthew Wild <mwild1@gmail.com>
parents: 2925
diff changeset
421 p = getpwnam(lua_tostring(L, 1));
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
422
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
423 if(!p) {
10921
6eb5d2bb11af util-src: Use the luaL_pushfail API added in Lua 5.4 to highlight all failure conditions
Kim Alvefur <zash@zash.se>
parents: 10799
diff changeset
424 luaL_pushfail(L);
3471
482275e38224 util.pposix, prosodyctl, mod_posix: Add initgroups() function, and bump module version. prosodyctl inits groups with the groups of prosody_user. (thanks dbb)
Matthew Wild <mwild1@gmail.com>
parents: 2925
diff changeset
425 lua_pushstring(L, "no-such-user");
482275e38224 util.pposix, prosodyctl, mod_posix: Add initgroups() function, and bump module version. prosodyctl inits groups with the groups of prosody_user. (thanks dbb)
Matthew Wild <mwild1@gmail.com>
parents: 2925
diff changeset
426 return 2;
482275e38224 util.pposix, prosodyctl, mod_posix: Add initgroups() function, and bump module version. prosodyctl inits groups with the groups of prosody_user. (thanks dbb)
Matthew Wild <mwild1@gmail.com>
parents: 2925
diff changeset
427 }
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
428
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
429 if(lua_gettop(L) < 2) {
3471
482275e38224 util.pposix, prosodyctl, mod_posix: Add initgroups() function, and bump module version. prosodyctl inits groups with the groups of prosody_user. (thanks dbb)
Matthew Wild <mwild1@gmail.com>
parents: 2925
diff changeset
430 lua_pushnil(L);
482275e38224 util.pposix, prosodyctl, mod_posix: Add initgroups() function, and bump module version. prosodyctl inits groups with the groups of prosody_user. (thanks dbb)
Matthew Wild <mwild1@gmail.com>
parents: 2925
diff changeset
431 }
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
432
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
433 switch(lua_type(L, 2)) {
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
434 case LUA_TNIL:
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
435 gid = p->pw_gid;
4415
0091db139229 util.pposix: Don't trust errno for success. Thanks Quince
Kim Alvefur <zash@zash.se>
parents: 3966
diff changeset
436 break;
7889
b8d694646597 util-src/*.c: Attach pointer * to name instead of type
Kim Alvefur <zash@zash.se>
parents: 7835
diff changeset
437
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
438 case LUA_TNUMBER:
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
439 gid = lua_tointeger(L, 2);
4415
0091db139229 util.pposix: Don't trust errno for success. Thanks Quince
Kim Alvefur <zash@zash.se>
parents: 3966
diff changeset
440 break;
7889
b8d694646597 util-src/*.c: Attach pointer * to name instead of type
Kim Alvefur <zash@zash.se>
parents: 7835
diff changeset
441
4415
0091db139229 util.pposix: Don't trust errno for success. Thanks Quince
Kim Alvefur <zash@zash.se>
parents: 3966
diff changeset
442 default:
10921
6eb5d2bb11af util-src: Use the luaL_pushfail API added in Lua 5.4 to highlight all failure conditions
Kim Alvefur <zash@zash.se>
parents: 10799
diff changeset
443 luaL_pushfail(L);
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
444 lua_pushstring(L, "invalid-gid");
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
445 return 2;
4415
0091db139229 util.pposix: Don't trust errno for success. Thanks Quince
Kim Alvefur <zash@zash.se>
parents: 3966
diff changeset
446 }
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
447
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
448 ret = initgroups(lua_tostring(L, 1), gid);
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
449
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
450 if(ret) {
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
451 switch(errno) {
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
452 case ENOMEM:
10921
6eb5d2bb11af util-src: Use the luaL_pushfail API added in Lua 5.4 to highlight all failure conditions
Kim Alvefur <zash@zash.se>
parents: 10799
diff changeset
453 luaL_pushfail(L);
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
454 lua_pushstring(L, "no-memory");
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
455 break;
7889
b8d694646597 util-src/*.c: Attach pointer * to name instead of type
Kim Alvefur <zash@zash.se>
parents: 7835
diff changeset
456
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
457 case EPERM:
10921
6eb5d2bb11af util-src: Use the luaL_pushfail API added in Lua 5.4 to highlight all failure conditions
Kim Alvefur <zash@zash.se>
parents: 10799
diff changeset
458 luaL_pushfail(L);
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
459 lua_pushstring(L, "permission-denied");
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
460 break;
7889
b8d694646597 util-src/*.c: Attach pointer * to name instead of type
Kim Alvefur <zash@zash.se>
parents: 7835
diff changeset
461
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
462 default:
10921
6eb5d2bb11af util-src: Use the luaL_pushfail API added in Lua 5.4 to highlight all failure conditions
Kim Alvefur <zash@zash.se>
parents: 10799
diff changeset
463 luaL_pushfail(L);
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
464 lua_pushstring(L, "unknown-error");
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
465 }
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
466 } else {
3471
482275e38224 util.pposix, prosodyctl, mod_posix: Add initgroups() function, and bump module version. prosodyctl inits groups with the groups of prosody_user. (thanks dbb)
Matthew Wild <mwild1@gmail.com>
parents: 2925
diff changeset
467 lua_pushboolean(L, 1);
482275e38224 util.pposix, prosodyctl, mod_posix: Add initgroups() function, and bump module version. prosodyctl inits groups with the groups of prosody_user. (thanks dbb)
Matthew Wild <mwild1@gmail.com>
parents: 2925
diff changeset
468 lua_pushnil(L);
482275e38224 util.pposix, prosodyctl, mod_posix: Add initgroups() function, and bump module version. prosodyctl inits groups with the groups of prosody_user. (thanks dbb)
Matthew Wild <mwild1@gmail.com>
parents: 2925
diff changeset
469 }
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
470
3471
482275e38224 util.pposix, prosodyctl, mod_posix: Add initgroups() function, and bump module version. prosodyctl inits groups with the groups of prosody_user. (thanks dbb)
Matthew Wild <mwild1@gmail.com>
parents: 2925
diff changeset
471 return 2;
482275e38224 util.pposix, prosodyctl, mod_posix: Add initgroups() function, and bump module version. prosodyctl inits groups with the groups of prosody_user. (thanks dbb)
Matthew Wild <mwild1@gmail.com>
parents: 2925
diff changeset
472 }
482275e38224 util.pposix, prosodyctl, mod_posix: Add initgroups() function, and bump module version. prosodyctl inits groups with the groups of prosody_user. (thanks dbb)
Matthew Wild <mwild1@gmail.com>
parents: 2925
diff changeset
473
10480
94cacf9fd0ae util.*.c: Add static qualifiers everywhere
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 10411
diff changeset
474 static int lc_umask(lua_State *L) {
2438
819ba949c7bc util.pposix: Add pposix.umask(), bump version to 0.3.2 (and do the same in mod_posix)
Matthew Wild <mwild1@gmail.com>
parents: 2437
diff changeset
475 char old_mode_string[7];
819ba949c7bc util.pposix: Add pposix.umask(), bump version to 0.3.2 (and do the same in mod_posix)
Matthew Wild <mwild1@gmail.com>
parents: 2437
diff changeset
476 mode_t old_mode = umask(strtoul(luaL_checkstring(L, 1), NULL, 8));
819ba949c7bc util.pposix: Add pposix.umask(), bump version to 0.3.2 (and do the same in mod_posix)
Matthew Wild <mwild1@gmail.com>
parents: 2437
diff changeset
477
819ba949c7bc util.pposix: Add pposix.umask(), bump version to 0.3.2 (and do the same in mod_posix)
Matthew Wild <mwild1@gmail.com>
parents: 2437
diff changeset
478 snprintf(old_mode_string, sizeof(old_mode_string), "%03o", old_mode);
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
479 old_mode_string[sizeof(old_mode_string) - 1] = 0;
2438
819ba949c7bc util.pposix: Add pposix.umask(), bump version to 0.3.2 (and do the same in mod_posix)
Matthew Wild <mwild1@gmail.com>
parents: 2437
diff changeset
480 lua_pushstring(L, old_mode_string);
819ba949c7bc util.pposix: Add pposix.umask(), bump version to 0.3.2 (and do the same in mod_posix)
Matthew Wild <mwild1@gmail.com>
parents: 2437
diff changeset
481
819ba949c7bc util.pposix: Add pposix.umask(), bump version to 0.3.2 (and do the same in mod_posix)
Matthew Wild <mwild1@gmail.com>
parents: 2437
diff changeset
482 return 1;
819ba949c7bc util.pposix: Add pposix.umask(), bump version to 0.3.2 (and do the same in mod_posix)
Matthew Wild <mwild1@gmail.com>
parents: 2437
diff changeset
483 }
819ba949c7bc util.pposix: Add pposix.umask(), bump version to 0.3.2 (and do the same in mod_posix)
Matthew Wild <mwild1@gmail.com>
parents: 2437
diff changeset
484
10480
94cacf9fd0ae util.*.c: Add static qualifiers everywhere
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 10411
diff changeset
485 static int lc_mkdir(lua_State *L) {
2443
b335ae55af77 util.pposix: Add mkdir(path)
Matthew Wild <mwild1@gmail.com>
parents: 2441
diff changeset
486 int ret = mkdir(luaL_checkstring(L, 1), S_IRUSR | S_IWUSR | S_IXUSR
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
487 | S_IRGRP | S_IWGRP | S_IXGRP
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
488 | S_IROTH | S_IXOTH); /* mode 775 */
2443
b335ae55af77 util.pposix: Add mkdir(path)
Matthew Wild <mwild1@gmail.com>
parents: 2441
diff changeset
489
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
490 lua_pushboolean(L, ret == 0);
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
491
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
492 if(ret) {
2443
b335ae55af77 util.pposix: Add mkdir(path)
Matthew Wild <mwild1@gmail.com>
parents: 2441
diff changeset
493 lua_pushstring(L, strerror(errno));
b335ae55af77 util.pposix: Add mkdir(path)
Matthew Wild <mwild1@gmail.com>
parents: 2441
diff changeset
494 return 2;
b335ae55af77 util.pposix: Add mkdir(path)
Matthew Wild <mwild1@gmail.com>
parents: 2441
diff changeset
495 }
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
496
2443
b335ae55af77 util.pposix: Add mkdir(path)
Matthew Wild <mwild1@gmail.com>
parents: 2441
diff changeset
497 return 1;
b335ae55af77 util.pposix: Add mkdir(path)
Matthew Wild <mwild1@gmail.com>
parents: 2441
diff changeset
498 }
b335ae55af77 util.pposix: Add mkdir(path)
Matthew Wild <mwild1@gmail.com>
parents: 2441
diff changeset
499
859
43f7e342135d Adding setrlimits() binding.
Tobias Markmann <tm@ayena.de>
parents: 804
diff changeset
500 /* Like POSIX's setrlimit()/getrlimit() API functions.
2436
ccc71b5d2e01 util.posix: Trailing whitespace
Matthew Wild <mwild1@gmail.com>
parents: 2060
diff changeset
501 *
859
43f7e342135d Adding setrlimits() binding.
Tobias Markmann <tm@ayena.de>
parents: 804
diff changeset
502 * Syntax:
43f7e342135d Adding setrlimits() binding.
Tobias Markmann <tm@ayena.de>
parents: 804
diff changeset
503 * pposix.setrlimit( resource, soft limit, hard limit)
2436
ccc71b5d2e01 util.posix: Trailing whitespace
Matthew Wild <mwild1@gmail.com>
parents: 2060
diff changeset
504 *
859
43f7e342135d Adding setrlimits() binding.
Tobias Markmann <tm@ayena.de>
parents: 804
diff changeset
505 * Any negative limit will be replace with the current limit by an additional call of getrlimit().
2436
ccc71b5d2e01 util.posix: Trailing whitespace
Matthew Wild <mwild1@gmail.com>
parents: 2060
diff changeset
506 *
859
43f7e342135d Adding setrlimits() binding.
Tobias Markmann <tm@ayena.de>
parents: 804
diff changeset
507 * Example usage:
43f7e342135d Adding setrlimits() binding.
Tobias Markmann <tm@ayena.de>
parents: 804
diff changeset
508 * pposix.setrlimit("NOFILE", 1000, 2000)
43f7e342135d Adding setrlimits() binding.
Tobias Markmann <tm@ayena.de>
parents: 804
diff changeset
509 */
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
510
13152
792f360a582b util.pposix: Use Lua enum API for resource limit name argument
Kim Alvefur <zash@zash.se>
parents: 12976
diff changeset
511 static const char *const resource_strings[] = {
792f360a582b util.pposix: Use Lua enum API for resource limit name argument
Kim Alvefur <zash@zash.se>
parents: 12976
diff changeset
512 /* Defined by POSIX */
792f360a582b util.pposix: Use Lua enum API for resource limit name argument
Kim Alvefur <zash@zash.se>
parents: 12976
diff changeset
513 "CORE",
792f360a582b util.pposix: Use Lua enum API for resource limit name argument
Kim Alvefur <zash@zash.se>
parents: 12976
diff changeset
514 "CPU",
792f360a582b util.pposix: Use Lua enum API for resource limit name argument
Kim Alvefur <zash@zash.se>
parents: 12976
diff changeset
515 "DATA",
792f360a582b util.pposix: Use Lua enum API for resource limit name argument
Kim Alvefur <zash@zash.se>
parents: 12976
diff changeset
516 "FSIZE",
792f360a582b util.pposix: Use Lua enum API for resource limit name argument
Kim Alvefur <zash@zash.se>
parents: 12976
diff changeset
517 "NOFILE",
792f360a582b util.pposix: Use Lua enum API for resource limit name argument
Kim Alvefur <zash@zash.se>
parents: 12976
diff changeset
518 "STACK",
9278
8f9e18d4fe50 util.pposix: Fix building on OS X (#1202)
Kim Alvefur <zash@zash.se>
parents: 8012
diff changeset
519 #if !(defined(sun) || defined(__sun) || defined(__APPLE__))
13152
792f360a582b util.pposix: Use Lua enum API for resource limit name argument
Kim Alvefur <zash@zash.se>
parents: 12976
diff changeset
520 "MEMLOCK",
792f360a582b util.pposix: Use Lua enum API for resource limit name argument
Kim Alvefur <zash@zash.se>
parents: 12976
diff changeset
521 "NPROC",
792f360a582b util.pposix: Use Lua enum API for resource limit name argument
Kim Alvefur <zash@zash.se>
parents: 12976
diff changeset
522 "RSS",
1842
8337c0d4aee4 util.pposix: Compatibility with Solaris systems (thanks Filip)
Matthew Wild <mwild1@gmail.com>
parents: 1579
diff changeset
523 #endif
5359
43517e649c53 util.pposix: Allow fetching RLIMIT_NICE when available
Matthew Wild <mwild1@gmail.com>
parents: 5176
diff changeset
524 #ifdef RLIMIT_NICE
13152
792f360a582b util.pposix: Use Lua enum API for resource limit name argument
Kim Alvefur <zash@zash.se>
parents: 12976
diff changeset
525 "NICE",
792f360a582b util.pposix: Use Lua enum API for resource limit name argument
Kim Alvefur <zash@zash.se>
parents: 12976
diff changeset
526 #endif
792f360a582b util.pposix: Use Lua enum API for resource limit name argument
Kim Alvefur <zash@zash.se>
parents: 12976
diff changeset
527 NULL
792f360a582b util.pposix: Use Lua enum API for resource limit name argument
Kim Alvefur <zash@zash.se>
parents: 12976
diff changeset
528 };
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
529
13152
792f360a582b util.pposix: Use Lua enum API for resource limit name argument
Kim Alvefur <zash@zash.se>
parents: 12976
diff changeset
530 static int resource_constants[] = {
792f360a582b util.pposix: Use Lua enum API for resource limit name argument
Kim Alvefur <zash@zash.se>
parents: 12976
diff changeset
531 RLIMIT_CORE,
792f360a582b util.pposix: Use Lua enum API for resource limit name argument
Kim Alvefur <zash@zash.se>
parents: 12976
diff changeset
532 RLIMIT_CPU,
792f360a582b util.pposix: Use Lua enum API for resource limit name argument
Kim Alvefur <zash@zash.se>
parents: 12976
diff changeset
533 RLIMIT_DATA,
792f360a582b util.pposix: Use Lua enum API for resource limit name argument
Kim Alvefur <zash@zash.se>
parents: 12976
diff changeset
534 RLIMIT_FSIZE,
792f360a582b util.pposix: Use Lua enum API for resource limit name argument
Kim Alvefur <zash@zash.se>
parents: 12976
diff changeset
535 RLIMIT_NOFILE,
792f360a582b util.pposix: Use Lua enum API for resource limit name argument
Kim Alvefur <zash@zash.se>
parents: 12976
diff changeset
536 RLIMIT_STACK,
792f360a582b util.pposix: Use Lua enum API for resource limit name argument
Kim Alvefur <zash@zash.se>
parents: 12976
diff changeset
537 #if !(defined(sun) || defined(__sun) || defined(__APPLE__))
792f360a582b util.pposix: Use Lua enum API for resource limit name argument
Kim Alvefur <zash@zash.se>
parents: 12976
diff changeset
538 RLIMIT_MEMLOCK,
792f360a582b util.pposix: Use Lua enum API for resource limit name argument
Kim Alvefur <zash@zash.se>
parents: 12976
diff changeset
539 RLIMIT_NPROC,
792f360a582b util.pposix: Use Lua enum API for resource limit name argument
Kim Alvefur <zash@zash.se>
parents: 12976
diff changeset
540 RLIMIT_RSS,
5359
43517e649c53 util.pposix: Allow fetching RLIMIT_NICE when available
Matthew Wild <mwild1@gmail.com>
parents: 5176
diff changeset
541 #endif
13152
792f360a582b util.pposix: Use Lua enum API for resource limit name argument
Kim Alvefur <zash@zash.se>
parents: 12976
diff changeset
542 #ifdef RLIMIT_NICE
792f360a582b util.pposix: Use Lua enum API for resource limit name argument
Kim Alvefur <zash@zash.se>
parents: 12976
diff changeset
543 RLIMIT_NICE,
792f360a582b util.pposix: Use Lua enum API for resource limit name argument
Kim Alvefur <zash@zash.se>
parents: 12976
diff changeset
544 #endif
792f360a582b util.pposix: Use Lua enum API for resource limit name argument
Kim Alvefur <zash@zash.se>
parents: 12976
diff changeset
545 -1,
792f360a582b util.pposix: Use Lua enum API for resource limit name argument
Kim Alvefur <zash@zash.se>
parents: 12976
diff changeset
546 };
859
43f7e342135d Adding setrlimits() binding.
Tobias Markmann <tm@ayena.de>
parents: 804
diff changeset
547
10480
94cacf9fd0ae util.*.c: Add static qualifiers everywhere
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 10411
diff changeset
548 static rlim_t arg_to_rlimit(lua_State *L, int idx, rlim_t current) {
5719
84025249fc04 util.pposix: Correctly handle 'unlimited' limits (RLIM_INFINITY), by returning and accepting the string 'unlimited' in get/setrlimit()
Matthew Wild <mwild1@gmail.com>
parents: 5451
diff changeset
549 switch(lua_type(L, idx)) {
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
550 case LUA_TSTRING:
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
551
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
552 if(strcmp(lua_tostring(L, idx), "unlimited") == 0) {
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
553 return RLIM_INFINITY;
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
554 }
9152
bad9e8b43f50 pposix: Generate an error when a passed string isn’t "unlimited".
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 9151
diff changeset
555 return luaL_argerror(L, idx, "unexpected type");
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
556
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
557 case LUA_TNUMBER:
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
558 return lua_tointeger(L, idx);
7889
b8d694646597 util-src/*.c: Attach pointer * to name instead of type
Kim Alvefur <zash@zash.se>
parents: 7835
diff changeset
559
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
560 case LUA_TNONE:
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
561 case LUA_TNIL:
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
562 return current;
7889
b8d694646597 util-src/*.c: Attach pointer * to name instead of type
Kim Alvefur <zash@zash.se>
parents: 7835
diff changeset
563
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
564 default:
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
565 return luaL_argerror(L, idx, "unexpected type");
5719
84025249fc04 util.pposix: Correctly handle 'unlimited' limits (RLIM_INFINITY), by returning and accepting the string 'unlimited' in get/setrlimit()
Matthew Wild <mwild1@gmail.com>
parents: 5451
diff changeset
566 }
84025249fc04 util.pposix: Correctly handle 'unlimited' limits (RLIM_INFINITY), by returning and accepting the string 'unlimited' in get/setrlimit()
Matthew Wild <mwild1@gmail.com>
parents: 5451
diff changeset
567 }
84025249fc04 util.pposix: Correctly handle 'unlimited' limits (RLIM_INFINITY), by returning and accepting the string 'unlimited' in get/setrlimit()
Matthew Wild <mwild1@gmail.com>
parents: 5451
diff changeset
568
10480
94cacf9fd0ae util.*.c: Add static qualifiers everywhere
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 10411
diff changeset
569 static int lc_setrlimit(lua_State *L) {
5719
84025249fc04 util.pposix: Correctly handle 'unlimited' limits (RLIM_INFINITY), by returning and accepting the string 'unlimited' in get/setrlimit()
Matthew Wild <mwild1@gmail.com>
parents: 5451
diff changeset
570 struct rlimit lim;
859
43f7e342135d Adding setrlimits() binding.
Tobias Markmann <tm@ayena.de>
parents: 804
diff changeset
571 int arguments = lua_gettop(L);
43f7e342135d Adding setrlimits() binding.
Tobias Markmann <tm@ayena.de>
parents: 804
diff changeset
572 int rid = -1;
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
573
859
43f7e342135d Adding setrlimits() binding.
Tobias Markmann <tm@ayena.de>
parents: 804
diff changeset
574 if(arguments < 1 || arguments > 3) {
43f7e342135d Adding setrlimits() binding.
Tobias Markmann <tm@ayena.de>
parents: 804
diff changeset
575 lua_pushboolean(L, 0);
865
2dce34e9182d pposix: Standardize error messages
Matthew Wild <mwild1@gmail.com>
parents: 864
diff changeset
576 lua_pushstring(L, "incorrect-arguments");
5717
bf98912a4f5b util.pposix: setrlimit(): Add missing return on error when an incorrect number of arguments are passed
Matthew Wild <mwild1@gmail.com>
parents: 5451
diff changeset
577 return 2;
859
43f7e342135d Adding setrlimits() binding.
Tobias Markmann <tm@ayena.de>
parents: 804
diff changeset
578 }
2436
ccc71b5d2e01 util.posix: Trailing whitespace
Matthew Wild <mwild1@gmail.com>
parents: 2060
diff changeset
579
13152
792f360a582b util.pposix: Use Lua enum API for resource limit name argument
Kim Alvefur <zash@zash.se>
parents: 12976
diff changeset
580 rid = resource_constants[luaL_checkoption(L, 1,NULL, resource_strings)];
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
581
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
582 if(rid == -1) {
859
43f7e342135d Adding setrlimits() binding.
Tobias Markmann <tm@ayena.de>
parents: 804
diff changeset
583 lua_pushboolean(L, 0);
865
2dce34e9182d pposix: Standardize error messages
Matthew Wild <mwild1@gmail.com>
parents: 864
diff changeset
584 lua_pushstring(L, "invalid-resource");
859
43f7e342135d Adding setrlimits() binding.
Tobias Markmann <tm@ayena.de>
parents: 804
diff changeset
585 return 2;
43f7e342135d Adding setrlimits() binding.
Tobias Markmann <tm@ayena.de>
parents: 804
diff changeset
586 }
2436
ccc71b5d2e01 util.posix: Trailing whitespace
Matthew Wild <mwild1@gmail.com>
parents: 2060
diff changeset
587
5719
84025249fc04 util.pposix: Correctly handle 'unlimited' limits (RLIM_INFINITY), by returning and accepting the string 'unlimited' in get/setrlimit()
Matthew Wild <mwild1@gmail.com>
parents: 5451
diff changeset
588 /* Fetch current values to use as defaults */
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
589 if(getrlimit(rid, &lim)) {
5719
84025249fc04 util.pposix: Correctly handle 'unlimited' limits (RLIM_INFINITY), by returning and accepting the string 'unlimited' in get/setrlimit()
Matthew Wild <mwild1@gmail.com>
parents: 5451
diff changeset
590 lua_pushboolean(L, 0);
84025249fc04 util.pposix: Correctly handle 'unlimited' limits (RLIM_INFINITY), by returning and accepting the string 'unlimited' in get/setrlimit()
Matthew Wild <mwild1@gmail.com>
parents: 5451
diff changeset
591 lua_pushstring(L, "getrlimit-failed");
84025249fc04 util.pposix: Correctly handle 'unlimited' limits (RLIM_INFINITY), by returning and accepting the string 'unlimited' in get/setrlimit()
Matthew Wild <mwild1@gmail.com>
parents: 5451
diff changeset
592 return 2;
84025249fc04 util.pposix: Correctly handle 'unlimited' limits (RLIM_INFINITY), by returning and accepting the string 'unlimited' in get/setrlimit()
Matthew Wild <mwild1@gmail.com>
parents: 5451
diff changeset
593 }
2436
ccc71b5d2e01 util.posix: Trailing whitespace
Matthew Wild <mwild1@gmail.com>
parents: 2060
diff changeset
594
5719
84025249fc04 util.pposix: Correctly handle 'unlimited' limits (RLIM_INFINITY), by returning and accepting the string 'unlimited' in get/setrlimit()
Matthew Wild <mwild1@gmail.com>
parents: 5451
diff changeset
595 lim.rlim_cur = arg_to_rlimit(L, 2, lim.rlim_cur);
84025249fc04 util.pposix: Correctly handle 'unlimited' limits (RLIM_INFINITY), by returning and accepting the string 'unlimited' in get/setrlimit()
Matthew Wild <mwild1@gmail.com>
parents: 5451
diff changeset
596 lim.rlim_max = arg_to_rlimit(L, 3, lim.rlim_max);
2436
ccc71b5d2e01 util.posix: Trailing whitespace
Matthew Wild <mwild1@gmail.com>
parents: 2060
diff changeset
597
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
598 if(setrlimit(rid, &lim)) {
859
43f7e342135d Adding setrlimits() binding.
Tobias Markmann <tm@ayena.de>
parents: 804
diff changeset
599 lua_pushboolean(L, 0);
5719
84025249fc04 util.pposix: Correctly handle 'unlimited' limits (RLIM_INFINITY), by returning and accepting the string 'unlimited' in get/setrlimit()
Matthew Wild <mwild1@gmail.com>
parents: 5451
diff changeset
600 lua_pushstring(L, "setrlimit-failed");
859
43f7e342135d Adding setrlimits() binding.
Tobias Markmann <tm@ayena.de>
parents: 804
diff changeset
601 return 2;
43f7e342135d Adding setrlimits() binding.
Tobias Markmann <tm@ayena.de>
parents: 804
diff changeset
602 }
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
603
859
43f7e342135d Adding setrlimits() binding.
Tobias Markmann <tm@ayena.de>
parents: 804
diff changeset
604 lua_pushboolean(L, 1);
43f7e342135d Adding setrlimits() binding.
Tobias Markmann <tm@ayena.de>
parents: 804
diff changeset
605 return 1;
43f7e342135d Adding setrlimits() binding.
Tobias Markmann <tm@ayena.de>
parents: 804
diff changeset
606 }
43f7e342135d Adding setrlimits() binding.
Tobias Markmann <tm@ayena.de>
parents: 804
diff changeset
607
10480
94cacf9fd0ae util.*.c: Add static qualifiers everywhere
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 10411
diff changeset
608 static int lc_getrlimit(lua_State *L) {
860
048aaec22b57 Added missing code.
Tobias Markmann <tm@ayena.de>
parents: 859
diff changeset
609 int arguments = lua_gettop(L);
048aaec22b57 Added missing code.
Tobias Markmann <tm@ayena.de>
parents: 859
diff changeset
610 int rid = -1;
861
2a5373897128 Make the code actually build.
Tobias Markmann <tm@ayena.de>
parents: 860
diff changeset
611 struct rlimit lim;
2436
ccc71b5d2e01 util.posix: Trailing whitespace
Matthew Wild <mwild1@gmail.com>
parents: 2060
diff changeset
612
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
613 if(arguments != 1) {
860
048aaec22b57 Added missing code.
Tobias Markmann <tm@ayena.de>
parents: 859
diff changeset
614 lua_pushboolean(L, 0);
865
2dce34e9182d pposix: Standardize error messages
Matthew Wild <mwild1@gmail.com>
parents: 864
diff changeset
615 lua_pushstring(L, "invalid-arguments");
860
048aaec22b57 Added missing code.
Tobias Markmann <tm@ayena.de>
parents: 859
diff changeset
616 return 2;
048aaec22b57 Added missing code.
Tobias Markmann <tm@ayena.de>
parents: 859
diff changeset
617 }
2436
ccc71b5d2e01 util.posix: Trailing whitespace
Matthew Wild <mwild1@gmail.com>
parents: 2060
diff changeset
618
13152
792f360a582b util.pposix: Use Lua enum API for resource limit name argument
Kim Alvefur <zash@zash.se>
parents: 12976
diff changeset
619 rid = resource_constants[luaL_checkoption(L, 1, NULL, resource_strings)];
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
620
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
621 if(rid != -1) {
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
622 if(getrlimit(rid, &lim)) {
860
048aaec22b57 Added missing code.
Tobias Markmann <tm@ayena.de>
parents: 859
diff changeset
623 lua_pushboolean(L, 0);
865
2dce34e9182d pposix: Standardize error messages
Matthew Wild <mwild1@gmail.com>
parents: 864
diff changeset
624 lua_pushstring(L, "getrlimit-failed.");
860
048aaec22b57 Added missing code.
Tobias Markmann <tm@ayena.de>
parents: 859
diff changeset
625 return 2;
048aaec22b57 Added missing code.
Tobias Markmann <tm@ayena.de>
parents: 859
diff changeset
626 }
048aaec22b57 Added missing code.
Tobias Markmann <tm@ayena.de>
parents: 859
diff changeset
627 } else {
7919
251bf68922d9 util.pposix: Fix typo in comment
Kim Alvefur <zash@zash.se>
parents: 7889
diff changeset
628 /* Unsupported resource. Sorry I'm pretty limited by POSIX standard. */
860
048aaec22b57 Added missing code.
Tobias Markmann <tm@ayena.de>
parents: 859
diff changeset
629 lua_pushboolean(L, 0);
865
2dce34e9182d pposix: Standardize error messages
Matthew Wild <mwild1@gmail.com>
parents: 864
diff changeset
630 lua_pushstring(L, "invalid-resource");
860
048aaec22b57 Added missing code.
Tobias Markmann <tm@ayena.de>
parents: 859
diff changeset
631 return 2;
048aaec22b57 Added missing code.
Tobias Markmann <tm@ayena.de>
parents: 859
diff changeset
632 }
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
633
860
048aaec22b57 Added missing code.
Tobias Markmann <tm@ayena.de>
parents: 859
diff changeset
634 lua_pushboolean(L, 1);
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
635
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
636 if(lim.rlim_cur == RLIM_INFINITY) {
5719
84025249fc04 util.pposix: Correctly handle 'unlimited' limits (RLIM_INFINITY), by returning and accepting the string 'unlimited' in get/setrlimit()
Matthew Wild <mwild1@gmail.com>
parents: 5451
diff changeset
637 lua_pushstring(L, "unlimited");
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
638 } else {
10799
763bb2ce3f60 util.pposix,signal: Pass around various OS numbers as integers [Lua 5.3]
Kim Alvefur <zash@zash.se>
parents: 10480
diff changeset
639 lua_pushinteger(L, lim.rlim_cur);
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
640 }
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
641
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
642 if(lim.rlim_max == RLIM_INFINITY) {
5719
84025249fc04 util.pposix: Correctly handle 'unlimited' limits (RLIM_INFINITY), by returning and accepting the string 'unlimited' in get/setrlimit()
Matthew Wild <mwild1@gmail.com>
parents: 5451
diff changeset
643 lua_pushstring(L, "unlimited");
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
644 } else {
10799
763bb2ce3f60 util.pposix,signal: Pass around various OS numbers as integers [Lua 5.3]
Kim Alvefur <zash@zash.se>
parents: 10480
diff changeset
645 lua_pushinteger(L, lim.rlim_max);
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
646 }
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
647
860
048aaec22b57 Added missing code.
Tobias Markmann <tm@ayena.de>
parents: 859
diff changeset
648 return 3;
859
43f7e342135d Adding setrlimits() binding.
Tobias Markmann <tm@ayena.de>
parents: 804
diff changeset
649 }
43f7e342135d Adding setrlimits() binding.
Tobias Markmann <tm@ayena.de>
parents: 804
diff changeset
650
10480
94cacf9fd0ae util.*.c: Add static qualifiers everywhere
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 10411
diff changeset
651 static int lc_abort(lua_State *L) {
9151
fee3933ff346 pposix, signal: Ignore unused arguments.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 9150
diff changeset
652 (void)L;
2060
b23295b5428a util.pposix: Add abort() function
Matthew Wild <mwild1@gmail.com>
parents: 1842
diff changeset
653 abort();
2830
1df57426263a util.pposix: Fix return type of lc_abort to shush compiler warning
Matthew Wild <mwild1@gmail.com>
parents: 2060
diff changeset
654 return 0;
2060
b23295b5428a util.pposix: Add abort() function
Matthew Wild <mwild1@gmail.com>
parents: 1842
diff changeset
655 }
b23295b5428a util.pposix: Add abort() function
Matthew Wild <mwild1@gmail.com>
parents: 1842
diff changeset
656
10480
94cacf9fd0ae util.*.c: Add static qualifiers everywhere
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 10411
diff changeset
657 static int lc_uname(lua_State *L) {
3481
72d3c8029178 util.pposix: Add pposix.uname(), bump version
Matthew Wild <mwild1@gmail.com>
parents: 3471
diff changeset
658 struct utsname uname_info;
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
659
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
660 if(uname(&uname_info) != 0) {
10921
6eb5d2bb11af util-src: Use the luaL_pushfail API added in Lua 5.4 to highlight all failure conditions
Kim Alvefur <zash@zash.se>
parents: 10799
diff changeset
661 luaL_pushfail(L);
3481
72d3c8029178 util.pposix: Add pposix.uname(), bump version
Matthew Wild <mwild1@gmail.com>
parents: 3471
diff changeset
662 lua_pushstring(L, strerror(errno));
72d3c8029178 util.pposix: Add pposix.uname(), bump version
Matthew Wild <mwild1@gmail.com>
parents: 3471
diff changeset
663 return 2;
72d3c8029178 util.pposix: Add pposix.uname(), bump version
Matthew Wild <mwild1@gmail.com>
parents: 3471
diff changeset
664 }
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
665
7969
1c6a07606309 util-src: Specify size of various tables to be allocated
Kim Alvefur <zash@zash.se>
parents: 7966
diff changeset
666 lua_createtable(L, 0, 6);
3481
72d3c8029178 util.pposix: Add pposix.uname(), bump version
Matthew Wild <mwild1@gmail.com>
parents: 3471
diff changeset
667 lua_pushstring(L, uname_info.sysname);
72d3c8029178 util.pposix: Add pposix.uname(), bump version
Matthew Wild <mwild1@gmail.com>
parents: 3471
diff changeset
668 lua_setfield(L, -2, "sysname");
72d3c8029178 util.pposix: Add pposix.uname(), bump version
Matthew Wild <mwild1@gmail.com>
parents: 3471
diff changeset
669 lua_pushstring(L, uname_info.nodename);
72d3c8029178 util.pposix: Add pposix.uname(), bump version
Matthew Wild <mwild1@gmail.com>
parents: 3471
diff changeset
670 lua_setfield(L, -2, "nodename");
72d3c8029178 util.pposix: Add pposix.uname(), bump version
Matthew Wild <mwild1@gmail.com>
parents: 3471
diff changeset
671 lua_pushstring(L, uname_info.release);
72d3c8029178 util.pposix: Add pposix.uname(), bump version
Matthew Wild <mwild1@gmail.com>
parents: 3471
diff changeset
672 lua_setfield(L, -2, "release");
72d3c8029178 util.pposix: Add pposix.uname(), bump version
Matthew Wild <mwild1@gmail.com>
parents: 3471
diff changeset
673 lua_pushstring(L, uname_info.version);
72d3c8029178 util.pposix: Add pposix.uname(), bump version
Matthew Wild <mwild1@gmail.com>
parents: 3471
diff changeset
674 lua_setfield(L, -2, "version");
72d3c8029178 util.pposix: Add pposix.uname(), bump version
Matthew Wild <mwild1@gmail.com>
parents: 3471
diff changeset
675 lua_pushstring(L, uname_info.machine);
72d3c8029178 util.pposix: Add pposix.uname(), bump version
Matthew Wild <mwild1@gmail.com>
parents: 3471
diff changeset
676 lua_setfield(L, -2, "machine");
7931
b619b85e01aa util.pposix, configure: Move _GNU_SOURCE macro into source files
Kim Alvefur <zash@zash.se>
parents: 7926
diff changeset
677 #ifdef __USE_GNU
6942
f12deb882148 util.pposix: Expose the uname GNU extension field 'domainname'
Kim Alvefur <zash@zash.se>
parents: 6789
diff changeset
678 lua_pushstring(L, uname_info.domainname);
f12deb882148 util.pposix: Expose the uname GNU extension field 'domainname'
Kim Alvefur <zash@zash.se>
parents: 6789
diff changeset
679 lua_setfield(L, -2, "domainname");
f12deb882148 util.pposix: Expose the uname GNU extension field 'domainname'
Kim Alvefur <zash@zash.se>
parents: 6789
diff changeset
680 #endif
3481
72d3c8029178 util.pposix: Add pposix.uname(), bump version
Matthew Wild <mwild1@gmail.com>
parents: 3471
diff changeset
681 return 1;
72d3c8029178 util.pposix: Add pposix.uname(), bump version
Matthew Wild <mwild1@gmail.com>
parents: 3471
diff changeset
682 }
72d3c8029178 util.pposix: Add pposix.uname(), bump version
Matthew Wild <mwild1@gmail.com>
parents: 3471
diff changeset
683
10480
94cacf9fd0ae util.*.c: Add static qualifiers everywhere
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 10411
diff changeset
684 static int lc_setenv(lua_State *L) {
7889
b8d694646597 util-src/*.c: Attach pointer * to name instead of type
Kim Alvefur <zash@zash.se>
parents: 7835
diff changeset
685 const char *var = luaL_checkstring(L, 1);
b8d694646597 util-src/*.c: Attach pointer * to name instead of type
Kim Alvefur <zash@zash.se>
parents: 7835
diff changeset
686 const char *value;
4934
5a6a85719b7b util.pposix: Add setenv()
Kim Alvefur <zash@zash.se>
parents: 4415
diff changeset
687
5a6a85719b7b util.pposix: Add setenv()
Kim Alvefur <zash@zash.se>
parents: 4415
diff changeset
688 /* If the second argument is nil or nothing, unset the var */
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
689 if(lua_isnoneornil(L, 2)) {
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
690 if(unsetenv(var) != 0) {
10921
6eb5d2bb11af util-src: Use the luaL_pushfail API added in Lua 5.4 to highlight all failure conditions
Kim Alvefur <zash@zash.se>
parents: 10799
diff changeset
691 luaL_pushfail(L);
4934
5a6a85719b7b util.pposix: Add setenv()
Kim Alvefur <zash@zash.se>
parents: 4415
diff changeset
692 lua_pushstring(L, strerror(errno));
5a6a85719b7b util.pposix: Add setenv()
Kim Alvefur <zash@zash.se>
parents: 4415
diff changeset
693 return 2;
5a6a85719b7b util.pposix: Add setenv()
Kim Alvefur <zash@zash.se>
parents: 4415
diff changeset
694 }
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
695
4934
5a6a85719b7b util.pposix: Add setenv()
Kim Alvefur <zash@zash.se>
parents: 4415
diff changeset
696 lua_pushboolean(L, 1);
5a6a85719b7b util.pposix: Add setenv()
Kim Alvefur <zash@zash.se>
parents: 4415
diff changeset
697 return 1;
5a6a85719b7b util.pposix: Add setenv()
Kim Alvefur <zash@zash.se>
parents: 4415
diff changeset
698 }
5a6a85719b7b util.pposix: Add setenv()
Kim Alvefur <zash@zash.se>
parents: 4415
diff changeset
699
5a6a85719b7b util.pposix: Add setenv()
Kim Alvefur <zash@zash.se>
parents: 4415
diff changeset
700 value = luaL_checkstring(L, 2);
5a6a85719b7b util.pposix: Add setenv()
Kim Alvefur <zash@zash.se>
parents: 4415
diff changeset
701
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
702 if(setenv(var, value, 1) != 0) {
10921
6eb5d2bb11af util-src: Use the luaL_pushfail API added in Lua 5.4 to highlight all failure conditions
Kim Alvefur <zash@zash.se>
parents: 10799
diff changeset
703 luaL_pushfail(L);
4934
5a6a85719b7b util.pposix: Add setenv()
Kim Alvefur <zash@zash.se>
parents: 4415
diff changeset
704 lua_pushstring(L, strerror(errno));
5a6a85719b7b util.pposix: Add setenv()
Kim Alvefur <zash@zash.se>
parents: 4415
diff changeset
705 return 2;
5a6a85719b7b util.pposix: Add setenv()
Kim Alvefur <zash@zash.se>
parents: 4415
diff changeset
706 }
5a6a85719b7b util.pposix: Add setenv()
Kim Alvefur <zash@zash.se>
parents: 4415
diff changeset
707
5a6a85719b7b util.pposix: Add setenv()
Kim Alvefur <zash@zash.se>
parents: 4415
diff changeset
708 lua_pushboolean(L, 1);
5a6a85719b7b util.pposix: Add setenv()
Kim Alvefur <zash@zash.se>
parents: 4415
diff changeset
709 return 1;
5a6a85719b7b util.pposix: Add setenv()
Kim Alvefur <zash@zash.se>
parents: 4415
diff changeset
710 }
5a6a85719b7b util.pposix: Add setenv()
Kim Alvefur <zash@zash.se>
parents: 4415
diff changeset
711
4946
2975c7008ccd util.pposix: Add meminfo() binding to memory allocation stats provided by mallinfo() [compilation tested on Ubuntu...]
Matthew Wild <mwild1@gmail.com>
parents: 4934
diff changeset
712 #ifdef WITH_MALLINFO
10480
94cacf9fd0ae util.*.c: Add static qualifiers everywhere
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 10411
diff changeset
713 static int lc_meminfo(lua_State *L) {
12154
760dd1fc3dc1 util.pposix: Use mallinfo2() on glibc 2.33, fix #1649
Kim Alvefur <zash@zash.se>
parents: 11656
diff changeset
714 #if __GLIBC_PREREQ(2, 33)
760dd1fc3dc1 util.pposix: Use mallinfo2() on glibc 2.33, fix #1649
Kim Alvefur <zash@zash.se>
parents: 11656
diff changeset
715 struct mallinfo2 info = mallinfo2();
760dd1fc3dc1 util.pposix: Use mallinfo2() on glibc 2.33, fix #1649
Kim Alvefur <zash@zash.se>
parents: 11656
diff changeset
716 #define MALLINFO_T size_t
760dd1fc3dc1 util.pposix: Use mallinfo2() on glibc 2.33, fix #1649
Kim Alvefur <zash@zash.se>
parents: 11656
diff changeset
717 #else
4946
2975c7008ccd util.pposix: Add meminfo() binding to memory allocation stats provided by mallinfo() [compilation tested on Ubuntu...]
Matthew Wild <mwild1@gmail.com>
parents: 4934
diff changeset
718 struct mallinfo info = mallinfo();
12154
760dd1fc3dc1 util.pposix: Use mallinfo2() on glibc 2.33, fix #1649
Kim Alvefur <zash@zash.se>
parents: 11656
diff changeset
719 #define MALLINFO_T unsigned
760dd1fc3dc1 util.pposix: Use mallinfo2() on glibc 2.33, fix #1649
Kim Alvefur <zash@zash.se>
parents: 11656
diff changeset
720 #endif
7969
1c6a07606309 util-src: Specify size of various tables to be allocated
Kim Alvefur <zash@zash.se>
parents: 7966
diff changeset
721 lua_createtable(L, 0, 5);
4950
02e5e9fa37b8 util.pposix: Add comments to mallinfo fields we use, so I don't forget tomorrow what they mean
Matthew Wild <mwild1@gmail.com>
parents: 4946
diff changeset
722 /* This is the total size of memory allocated with sbrk by malloc, in bytes. */
12154
760dd1fc3dc1 util.pposix: Use mallinfo2() on glibc 2.33, fix #1649
Kim Alvefur <zash@zash.se>
parents: 11656
diff changeset
723 lua_pushinteger(L, (MALLINFO_T)info.arena);
4946
2975c7008ccd util.pposix: Add meminfo() binding to memory allocation stats provided by mallinfo() [compilation tested on Ubuntu...]
Matthew Wild <mwild1@gmail.com>
parents: 4934
diff changeset
724 lua_setfield(L, -2, "allocated");
4950
02e5e9fa37b8 util.pposix: Add comments to mallinfo fields we use, so I don't forget tomorrow what they mean
Matthew Wild <mwild1@gmail.com>
parents: 4946
diff changeset
725 /* This is the total size of memory allocated with mmap, in bytes. */
12154
760dd1fc3dc1 util.pposix: Use mallinfo2() on glibc 2.33, fix #1649
Kim Alvefur <zash@zash.se>
parents: 11656
diff changeset
726 lua_pushinteger(L, (MALLINFO_T)info.hblkhd);
4946
2975c7008ccd util.pposix: Add meminfo() binding to memory allocation stats provided by mallinfo() [compilation tested on Ubuntu...]
Matthew Wild <mwild1@gmail.com>
parents: 4934
diff changeset
727 lua_setfield(L, -2, "allocated_mmap");
4950
02e5e9fa37b8 util.pposix: Add comments to mallinfo fields we use, so I don't forget tomorrow what they mean
Matthew Wild <mwild1@gmail.com>
parents: 4946
diff changeset
728 /* This is the total size of memory occupied by chunks handed out by malloc. */
12154
760dd1fc3dc1 util.pposix: Use mallinfo2() on glibc 2.33, fix #1649
Kim Alvefur <zash@zash.se>
parents: 11656
diff changeset
729 lua_pushinteger(L, (MALLINFO_T)info.uordblks);
4946
2975c7008ccd util.pposix: Add meminfo() binding to memory allocation stats provided by mallinfo() [compilation tested on Ubuntu...]
Matthew Wild <mwild1@gmail.com>
parents: 4934
diff changeset
730 lua_setfield(L, -2, "used");
4950
02e5e9fa37b8 util.pposix: Add comments to mallinfo fields we use, so I don't forget tomorrow what they mean
Matthew Wild <mwild1@gmail.com>
parents: 4946
diff changeset
731 /* This is the total size of memory occupied by free (not in use) chunks. */
12154
760dd1fc3dc1 util.pposix: Use mallinfo2() on glibc 2.33, fix #1649
Kim Alvefur <zash@zash.se>
parents: 11656
diff changeset
732 lua_pushinteger(L, (MALLINFO_T)info.fordblks);
4946
2975c7008ccd util.pposix: Add meminfo() binding to memory allocation stats provided by mallinfo() [compilation tested on Ubuntu...]
Matthew Wild <mwild1@gmail.com>
parents: 4934
diff changeset
733 lua_setfield(L, -2, "unused");
4950
02e5e9fa37b8 util.pposix: Add comments to mallinfo fields we use, so I don't forget tomorrow what they mean
Matthew Wild <mwild1@gmail.com>
parents: 4946
diff changeset
734 /* This is the size of the top-most releasable chunk that normally borders the
02e5e9fa37b8 util.pposix: Add comments to mallinfo fields we use, so I don't forget tomorrow what they mean
Matthew Wild <mwild1@gmail.com>
parents: 4946
diff changeset
735 end of the heap (i.e., the high end of the virtual address space's data segment). */
12154
760dd1fc3dc1 util.pposix: Use mallinfo2() on glibc 2.33, fix #1649
Kim Alvefur <zash@zash.se>
parents: 11656
diff changeset
736 lua_pushinteger(L, (MALLINFO_T)info.keepcost);
4946
2975c7008ccd util.pposix: Add meminfo() binding to memory allocation stats provided by mallinfo() [compilation tested on Ubuntu...]
Matthew Wild <mwild1@gmail.com>
parents: 4934
diff changeset
737 lua_setfield(L, -2, "returnable");
2975c7008ccd util.pposix: Add meminfo() binding to memory allocation stats provided by mallinfo() [compilation tested on Ubuntu...]
Matthew Wild <mwild1@gmail.com>
parents: 4934
diff changeset
738 return 1;
2975c7008ccd util.pposix: Add meminfo() binding to memory allocation stats provided by mallinfo() [compilation tested on Ubuntu...]
Matthew Wild <mwild1@gmail.com>
parents: 4934
diff changeset
739 }
12154
760dd1fc3dc1 util.pposix: Use mallinfo2() on glibc 2.33, fix #1649
Kim Alvefur <zash@zash.se>
parents: 11656
diff changeset
740 #undef MALLINFO_T
4946
2975c7008ccd util.pposix: Add meminfo() binding to memory allocation stats provided by mallinfo() [compilation tested on Ubuntu...]
Matthew Wild <mwild1@gmail.com>
parents: 4934
diff changeset
741 #endif
2975c7008ccd util.pposix: Add meminfo() binding to memory allocation stats provided by mallinfo() [compilation tested on Ubuntu...]
Matthew Wild <mwild1@gmail.com>
parents: 4934
diff changeset
742
8010
49feb0da29e1 util.pposix: Add function for atomically appending data to a file
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
743 /*
49feb0da29e1 util.pposix: Add function for atomically appending data to a file
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
744 * Append some data to a file handle
49feb0da29e1 util.pposix: Add function for atomically appending data to a file
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
745 * Attempt to allocate space first
49feb0da29e1 util.pposix: Add function for atomically appending data to a file
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
746 * Truncate to original size on failure
49feb0da29e1 util.pposix: Add function for atomically appending data to a file
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
747 */
10480
94cacf9fd0ae util.*.c: Add static qualifiers everywhere
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 10411
diff changeset
748 static int lc_atomic_append(lua_State *L) {
8010
49feb0da29e1 util.pposix: Add function for atomically appending data to a file
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
749 int err;
49feb0da29e1 util.pposix: Add function for atomically appending data to a file
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
750 size_t len;
49feb0da29e1 util.pposix: Add function for atomically appending data to a file
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
751
49feb0da29e1 util.pposix: Add function for atomically appending data to a file
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
752 FILE *f = *(FILE **) luaL_checkudata(L, 1, LUA_FILEHANDLE);
49feb0da29e1 util.pposix: Add function for atomically appending data to a file
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
753 const char *data = luaL_checklstring(L, 2, &len);
49feb0da29e1 util.pposix: Add function for atomically appending data to a file
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
754
49feb0da29e1 util.pposix: Add function for atomically appending data to a file
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
755 off_t offset = ftell(f);
49feb0da29e1 util.pposix: Add function for atomically appending data to a file
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
756
49feb0da29e1 util.pposix: Add function for atomically appending data to a file
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
757 #if defined(__linux__)
49feb0da29e1 util.pposix: Add function for atomically appending data to a file
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
758 /* Try to allocate space without changing the file size. */
49feb0da29e1 util.pposix: Add function for atomically appending data to a file
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
759 if((err = fallocate(fileno(f), FALLOC_FL_KEEP_SIZE, offset, len))) {
49feb0da29e1 util.pposix: Add function for atomically appending data to a file
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
760 if(errno != 0) {
49feb0da29e1 util.pposix: Add function for atomically appending data to a file
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
761 /* Some old versions of Linux apparently use the return value instead of errno */
49feb0da29e1 util.pposix: Add function for atomically appending data to a file
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
762 err = errno;
49feb0da29e1 util.pposix: Add function for atomically appending data to a file
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
763 }
49feb0da29e1 util.pposix: Add function for atomically appending data to a file
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
764 switch(err) {
49feb0da29e1 util.pposix: Add function for atomically appending data to a file
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
765 case ENOSYS: /* Kernel doesn't implement fallocate */
49feb0da29e1 util.pposix: Add function for atomically appending data to a file
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
766 case EOPNOTSUPP: /* Filesystem doesn't support it */
49feb0da29e1 util.pposix: Add function for atomically appending data to a file
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
767 /* Ignore and proceed to try to write */
49feb0da29e1 util.pposix: Add function for atomically appending data to a file
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
768 break;
49feb0da29e1 util.pposix: Add function for atomically appending data to a file
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
769
49feb0da29e1 util.pposix: Add function for atomically appending data to a file
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
770 case ENOSPC: /* No space left */
49feb0da29e1 util.pposix: Add function for atomically appending data to a file
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
771 default: /* Other issues */
10921
6eb5d2bb11af util-src: Use the luaL_pushfail API added in Lua 5.4 to highlight all failure conditions
Kim Alvefur <zash@zash.se>
parents: 10799
diff changeset
772 luaL_pushfail(L);
8010
49feb0da29e1 util.pposix: Add function for atomically appending data to a file
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
773 lua_pushstring(L, strerror(err));
49feb0da29e1 util.pposix: Add function for atomically appending data to a file
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
774 lua_pushinteger(L, err);
49feb0da29e1 util.pposix: Add function for atomically appending data to a file
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
775 return 3;
49feb0da29e1 util.pposix: Add function for atomically appending data to a file
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
776 }
49feb0da29e1 util.pposix: Add function for atomically appending data to a file
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
777 }
49feb0da29e1 util.pposix: Add function for atomically appending data to a file
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
778 #endif
49feb0da29e1 util.pposix: Add function for atomically appending data to a file
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
779
49feb0da29e1 util.pposix: Add function for atomically appending data to a file
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
780 if(fwrite(data, sizeof(char), len, f) == len) {
49feb0da29e1 util.pposix: Add function for atomically appending data to a file
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
781 if(fflush(f) == 0) {
49feb0da29e1 util.pposix: Add function for atomically appending data to a file
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
782 lua_pushboolean(L, 1); /* Great success! */
49feb0da29e1 util.pposix: Add function for atomically appending data to a file
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
783 return 1;
49feb0da29e1 util.pposix: Add function for atomically appending data to a file
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
784 } else {
49feb0da29e1 util.pposix: Add function for atomically appending data to a file
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
785 err = errno;
49feb0da29e1 util.pposix: Add function for atomically appending data to a file
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
786 }
49feb0da29e1 util.pposix: Add function for atomically appending data to a file
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
787 } else {
49feb0da29e1 util.pposix: Add function for atomically appending data to a file
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
788 err = ferror(f);
49feb0da29e1 util.pposix: Add function for atomically appending data to a file
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
789 }
49feb0da29e1 util.pposix: Add function for atomically appending data to a file
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
790
49feb0da29e1 util.pposix: Add function for atomically appending data to a file
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
791 fseek(f, offset, SEEK_SET);
49feb0da29e1 util.pposix: Add function for atomically appending data to a file
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
792
49feb0da29e1 util.pposix: Add function for atomically appending data to a file
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
793 /* Cut partially written data */
49feb0da29e1 util.pposix: Add function for atomically appending data to a file
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
794 if(ftruncate(fileno(f), offset)) {
49feb0da29e1 util.pposix: Add function for atomically appending data to a file
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
795 /* The file is now most likely corrupted, throw hard error */
49feb0da29e1 util.pposix: Add function for atomically appending data to a file
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
796 return luaL_error(L, "atomic_append() failed in ftruncate(): %s", strerror(errno));
49feb0da29e1 util.pposix: Add function for atomically appending data to a file
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
797 }
49feb0da29e1 util.pposix: Add function for atomically appending data to a file
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
798
10921
6eb5d2bb11af util-src: Use the luaL_pushfail API added in Lua 5.4 to highlight all failure conditions
Kim Alvefur <zash@zash.se>
parents: 10799
diff changeset
799 luaL_pushfail(L);
8010
49feb0da29e1 util.pposix: Add function for atomically appending data to a file
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
800 lua_pushstring(L, strerror(err));
49feb0da29e1 util.pposix: Add function for atomically appending data to a file
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
801 lua_pushinteger(L, err);
49feb0da29e1 util.pposix: Add function for atomically appending data to a file
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
802 return 3;
49feb0da29e1 util.pposix: Add function for atomically appending data to a file
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
803 }
49feb0da29e1 util.pposix: Add function for atomically appending data to a file
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
804
13184
d16845afb3e2 util.pposix: Add remove_blocks() for deleting parts of files
Kim Alvefur <zash@zash.se>
parents: 13152
diff changeset
805 static int lc_remove_blocks(lua_State *L) {
d16845afb3e2 util.pposix: Add remove_blocks() for deleting parts of files
Kim Alvefur <zash@zash.se>
parents: 13152
diff changeset
806 #if defined(__linux__)
d16845afb3e2 util.pposix: Add remove_blocks() for deleting parts of files
Kim Alvefur <zash@zash.se>
parents: 13152
diff changeset
807 int err;
d16845afb3e2 util.pposix: Add remove_blocks() for deleting parts of files
Kim Alvefur <zash@zash.se>
parents: 13152
diff changeset
808
d16845afb3e2 util.pposix: Add remove_blocks() for deleting parts of files
Kim Alvefur <zash@zash.se>
parents: 13152
diff changeset
809 FILE *f = *(FILE **) luaL_checkudata(L, 1, LUA_FILEHANDLE);
d16845afb3e2 util.pposix: Add remove_blocks() for deleting parts of files
Kim Alvefur <zash@zash.se>
parents: 13152
diff changeset
810 off_t offset = (off_t)luaL_checkinteger(L, 2);
d16845afb3e2 util.pposix: Add remove_blocks() for deleting parts of files
Kim Alvefur <zash@zash.se>
parents: 13152
diff changeset
811 off_t length = (off_t)luaL_checkinteger(L, 3);
d16845afb3e2 util.pposix: Add remove_blocks() for deleting parts of files
Kim Alvefur <zash@zash.se>
parents: 13152
diff changeset
812
d16845afb3e2 util.pposix: Add remove_blocks() for deleting parts of files
Kim Alvefur <zash@zash.se>
parents: 13152
diff changeset
813 errno = 0;
d16845afb3e2 util.pposix: Add remove_blocks() for deleting parts of files
Kim Alvefur <zash@zash.se>
parents: 13152
diff changeset
814
d16845afb3e2 util.pposix: Add remove_blocks() for deleting parts of files
Kim Alvefur <zash@zash.se>
parents: 13152
diff changeset
815 if((err = fallocate(fileno(f), FALLOC_FL_COLLAPSE_RANGE, offset, length))) {
d16845afb3e2 util.pposix: Add remove_blocks() for deleting parts of files
Kim Alvefur <zash@zash.se>
parents: 13152
diff changeset
816 if(errno != 0) {
d16845afb3e2 util.pposix: Add remove_blocks() for deleting parts of files
Kim Alvefur <zash@zash.se>
parents: 13152
diff changeset
817 /* Some old versions of Linux apparently use the return value instead of errno */
d16845afb3e2 util.pposix: Add remove_blocks() for deleting parts of files
Kim Alvefur <zash@zash.se>
parents: 13152
diff changeset
818 err = errno;
d16845afb3e2 util.pposix: Add remove_blocks() for deleting parts of files
Kim Alvefur <zash@zash.se>
parents: 13152
diff changeset
819 }
d16845afb3e2 util.pposix: Add remove_blocks() for deleting parts of files
Kim Alvefur <zash@zash.se>
parents: 13152
diff changeset
820
d16845afb3e2 util.pposix: Add remove_blocks() for deleting parts of files
Kim Alvefur <zash@zash.se>
parents: 13152
diff changeset
821 switch(err) {
d16845afb3e2 util.pposix: Add remove_blocks() for deleting parts of files
Kim Alvefur <zash@zash.se>
parents: 13152
diff changeset
822 default: /* Other issues */
d16845afb3e2 util.pposix: Add remove_blocks() for deleting parts of files
Kim Alvefur <zash@zash.se>
parents: 13152
diff changeset
823 luaL_pushfail(L);
d16845afb3e2 util.pposix: Add remove_blocks() for deleting parts of files
Kim Alvefur <zash@zash.se>
parents: 13152
diff changeset
824 lua_pushstring(L, strerror(err));
d16845afb3e2 util.pposix: Add remove_blocks() for deleting parts of files
Kim Alvefur <zash@zash.se>
parents: 13152
diff changeset
825 lua_pushinteger(L, err);
d16845afb3e2 util.pposix: Add remove_blocks() for deleting parts of files
Kim Alvefur <zash@zash.se>
parents: 13152
diff changeset
826 return 3;
d16845afb3e2 util.pposix: Add remove_blocks() for deleting parts of files
Kim Alvefur <zash@zash.se>
parents: 13152
diff changeset
827 }
d16845afb3e2 util.pposix: Add remove_blocks() for deleting parts of files
Kim Alvefur <zash@zash.se>
parents: 13152
diff changeset
828 }
d16845afb3e2 util.pposix: Add remove_blocks() for deleting parts of files
Kim Alvefur <zash@zash.se>
parents: 13152
diff changeset
829
d16845afb3e2 util.pposix: Add remove_blocks() for deleting parts of files
Kim Alvefur <zash@zash.se>
parents: 13152
diff changeset
830 lua_pushboolean(L, err == 0);
d16845afb3e2 util.pposix: Add remove_blocks() for deleting parts of files
Kim Alvefur <zash@zash.se>
parents: 13152
diff changeset
831 return 1;
d16845afb3e2 util.pposix: Add remove_blocks() for deleting parts of files
Kim Alvefur <zash@zash.se>
parents: 13152
diff changeset
832 #else
d16845afb3e2 util.pposix: Add remove_blocks() for deleting parts of files
Kim Alvefur <zash@zash.se>
parents: 13152
diff changeset
833 luaL_pushfail(L);
d16845afb3e2 util.pposix: Add remove_blocks() for deleting parts of files
Kim Alvefur <zash@zash.se>
parents: 13152
diff changeset
834 lua_pushstring(L, strerror(EOPNOTSUPP));
d16845afb3e2 util.pposix: Add remove_blocks() for deleting parts of files
Kim Alvefur <zash@zash.se>
parents: 13152
diff changeset
835 lua_pushinteger(L, EOPNOTSUPP);
d16845afb3e2 util.pposix: Add remove_blocks() for deleting parts of files
Kim Alvefur <zash@zash.se>
parents: 13152
diff changeset
836 return 3;
d16845afb3e2 util.pposix: Add remove_blocks() for deleting parts of files
Kim Alvefur <zash@zash.se>
parents: 13152
diff changeset
837 #endif
d16845afb3e2 util.pposix: Add remove_blocks() for deleting parts of files
Kim Alvefur <zash@zash.se>
parents: 13152
diff changeset
838 }
d16845afb3e2 util.pposix: Add remove_blocks() for deleting parts of files
Kim Alvefur <zash@zash.se>
parents: 13152
diff changeset
839
11656
c368b4f6ee04 util.pposix: Bind isatty(3)
Kim Alvefur <zash@zash.se>
parents: 10921
diff changeset
840 static int lc_isatty(lua_State *L) {
c368b4f6ee04 util.pposix: Bind isatty(3)
Kim Alvefur <zash@zash.se>
parents: 10921
diff changeset
841 FILE *f = *(FILE **) luaL_checkudata(L, 1, LUA_FILEHANDLE);
c368b4f6ee04 util.pposix: Bind isatty(3)
Kim Alvefur <zash@zash.se>
parents: 10921
diff changeset
842 const int fd = fileno(f);
c368b4f6ee04 util.pposix: Bind isatty(3)
Kim Alvefur <zash@zash.se>
parents: 10921
diff changeset
843 lua_pushboolean(L, isatty(fd));
c368b4f6ee04 util.pposix: Bind isatty(3)
Kim Alvefur <zash@zash.se>
parents: 10921
diff changeset
844 return 1;
c368b4f6ee04 util.pposix: Bind isatty(3)
Kim Alvefur <zash@zash.se>
parents: 10921
diff changeset
845 }
c368b4f6ee04 util.pposix: Bind isatty(3)
Kim Alvefur <zash@zash.se>
parents: 10921
diff changeset
846
723
c1e7d280c174 mod_posix/pposix: Fix reporting of incorrect PID on daemonization. Log correct PID, and support writing a pidfile (pidfile = '/path/to/prosody.pid' in config). Added getpid() to pposix and improved function names.
Matthew Wild <mwild1@gmail.com>
parents: 722
diff changeset
847 /* Register functions */
c1e7d280c174 mod_posix/pposix: Fix reporting of incorrect PID on daemonization. Log correct PID, and support writing a pidfile (pidfile = '/path/to/prosody.pid' in config). Added getpid() to pposix and improved function names.
Matthew Wild <mwild1@gmail.com>
parents: 722
diff changeset
848
12976
a187600ec7d6 util: Add compat for prosody module name change to C sources
Kim Alvefur <zash@zash.se>
parents: 12575
diff changeset
849 int luaopen_prosody_util_pposix(lua_State *L) {
7818
54669df178c2 util-src: Make C modules assert that the Lua runtime matches what it was compiled for
Kim Alvefur <zash@zash.se>
parents: 7789
diff changeset
850 luaL_checkversion(L);
2441
d72078946a16 util.pposix: Replace the unwieldy module table generation with luaL_register() call - side effect - it now sets the pposix global to the module table
Matthew Wild <mwild1@gmail.com>
parents: 2438
diff changeset
851 luaL_Reg exports[] = {
d72078946a16 util.pposix: Replace the unwieldy module table generation with luaL_register() call - side effect - it now sets the pposix global to the module table
Matthew Wild <mwild1@gmail.com>
parents: 2438
diff changeset
852 { "abort", lc_abort },
722
63456c9d0522 mod_posix: Support for logging to syslog (log = 'syslog' in config)
Matthew Wild <mwild1@gmail.com>
parents: 588
diff changeset
853
2441
d72078946a16 util.pposix: Replace the unwieldy module table generation with luaL_register() call - side effect - it now sets the pposix global to the module table
Matthew Wild <mwild1@gmail.com>
parents: 2438
diff changeset
854 { "daemonize", lc_daemonize },
722
63456c9d0522 mod_posix: Support for logging to syslog (log = 'syslog' in config)
Matthew Wild <mwild1@gmail.com>
parents: 588
diff changeset
855
2441
d72078946a16 util.pposix: Replace the unwieldy module table generation with luaL_register() call - side effect - it now sets the pposix global to the module table
Matthew Wild <mwild1@gmail.com>
parents: 2438
diff changeset
856 { "syslog_open", lc_syslog_open },
d72078946a16 util.pposix: Replace the unwieldy module table generation with luaL_register() call - side effect - it now sets the pposix global to the module table
Matthew Wild <mwild1@gmail.com>
parents: 2438
diff changeset
857 { "syslog_close", lc_syslog_close },
d72078946a16 util.pposix: Replace the unwieldy module table generation with luaL_register() call - side effect - it now sets the pposix global to the module table
Matthew Wild <mwild1@gmail.com>
parents: 2438
diff changeset
858 { "syslog_log", lc_syslog_log },
d72078946a16 util.pposix: Replace the unwieldy module table generation with luaL_register() call - side effect - it now sets the pposix global to the module table
Matthew Wild <mwild1@gmail.com>
parents: 2438
diff changeset
859 { "syslog_setminlevel", lc_syslog_setmask },
722
63456c9d0522 mod_posix: Support for logging to syslog (log = 'syslog' in config)
Matthew Wild <mwild1@gmail.com>
parents: 588
diff changeset
860
2441
d72078946a16 util.pposix: Replace the unwieldy module table generation with luaL_register() call - side effect - it now sets the pposix global to the module table
Matthew Wild <mwild1@gmail.com>
parents: 2438
diff changeset
861 { "getpid", lc_getpid },
d72078946a16 util.pposix: Replace the unwieldy module table generation with luaL_register() call - side effect - it now sets the pposix global to the module table
Matthew Wild <mwild1@gmail.com>
parents: 2438
diff changeset
862 { "getuid", lc_getuid },
d72078946a16 util.pposix: Replace the unwieldy module table generation with luaL_register() call - side effect - it now sets the pposix global to the module table
Matthew Wild <mwild1@gmail.com>
parents: 2438
diff changeset
863 { "getgid", lc_getgid },
722
63456c9d0522 mod_posix: Support for logging to syslog (log = 'syslog' in config)
Matthew Wild <mwild1@gmail.com>
parents: 588
diff changeset
864
2441
d72078946a16 util.pposix: Replace the unwieldy module table generation with luaL_register() call - side effect - it now sets the pposix global to the module table
Matthew Wild <mwild1@gmail.com>
parents: 2438
diff changeset
865 { "setuid", lc_setuid },
d72078946a16 util.pposix: Replace the unwieldy module table generation with luaL_register() call - side effect - it now sets the pposix global to the module table
Matthew Wild <mwild1@gmail.com>
parents: 2438
diff changeset
866 { "setgid", lc_setgid },
3471
482275e38224 util.pposix, prosodyctl, mod_posix: Add initgroups() function, and bump module version. prosodyctl inits groups with the groups of prosody_user. (thanks dbb)
Matthew Wild <mwild1@gmail.com>
parents: 2925
diff changeset
867 { "initgroups", lc_initgroups },
729
f62ef65d5c01 pposix: Add syslog_setmask (use config: minimum_log_level = 'warn' etc.)
Matthew Wild <mwild1@gmail.com>
parents: 727
diff changeset
868
2441
d72078946a16 util.pposix: Replace the unwieldy module table generation with luaL_register() call - side effect - it now sets the pposix global to the module table
Matthew Wild <mwild1@gmail.com>
parents: 2438
diff changeset
869 { "umask", lc_umask },
723
c1e7d280c174 mod_posix/pposix: Fix reporting of incorrect PID on daemonization. Log correct PID, and support writing a pidfile (pidfile = '/path/to/prosody.pid' in config). Added getpid() to pposix and improved function names.
Matthew Wild <mwild1@gmail.com>
parents: 722
diff changeset
870
2443
b335ae55af77 util.pposix: Add mkdir(path)
Matthew Wild <mwild1@gmail.com>
parents: 2441
diff changeset
871 { "mkdir", lc_mkdir },
804
9bc1544c99b7 util.pposix: Add getuid/setuid (we don't use them yet)
Matthew Wild <mwild1@gmail.com>
parents: 796
diff changeset
872
2441
d72078946a16 util.pposix: Replace the unwieldy module table generation with luaL_register() call - side effect - it now sets the pposix global to the module table
Matthew Wild <mwild1@gmail.com>
parents: 2438
diff changeset
873 { "setrlimit", lc_setrlimit },
d72078946a16 util.pposix: Replace the unwieldy module table generation with luaL_register() call - side effect - it now sets the pposix global to the module table
Matthew Wild <mwild1@gmail.com>
parents: 2438
diff changeset
874 { "getrlimit", lc_getrlimit },
2436
ccc71b5d2e01 util.posix: Trailing whitespace
Matthew Wild <mwild1@gmail.com>
parents: 2060
diff changeset
875
3481
72d3c8029178 util.pposix: Add pposix.uname(), bump version
Matthew Wild <mwild1@gmail.com>
parents: 3471
diff changeset
876 { "uname", lc_uname },
72d3c8029178 util.pposix: Add pposix.uname(), bump version
Matthew Wild <mwild1@gmail.com>
parents: 3471
diff changeset
877
4934
5a6a85719b7b util.pposix: Add setenv()
Kim Alvefur <zash@zash.se>
parents: 4415
diff changeset
878 { "setenv", lc_setenv },
5a6a85719b7b util.pposix: Add setenv()
Kim Alvefur <zash@zash.se>
parents: 4415
diff changeset
879
4946
2975c7008ccd util.pposix: Add meminfo() binding to memory allocation stats provided by mallinfo() [compilation tested on Ubuntu...]
Matthew Wild <mwild1@gmail.com>
parents: 4934
diff changeset
880 #ifdef WITH_MALLINFO
2975c7008ccd util.pposix: Add meminfo() binding to memory allocation stats provided by mallinfo() [compilation tested on Ubuntu...]
Matthew Wild <mwild1@gmail.com>
parents: 4934
diff changeset
881 { "meminfo", lc_meminfo },
2975c7008ccd util.pposix: Add meminfo() binding to memory allocation stats provided by mallinfo() [compilation tested on Ubuntu...]
Matthew Wild <mwild1@gmail.com>
parents: 4934
diff changeset
882 #endif
2975c7008ccd util.pposix: Add meminfo() binding to memory allocation stats provided by mallinfo() [compilation tested on Ubuntu...]
Matthew Wild <mwild1@gmail.com>
parents: 4934
diff changeset
883
8010
49feb0da29e1 util.pposix: Add function for atomically appending data to a file
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
884 { "atomic_append", lc_atomic_append },
13184
d16845afb3e2 util.pposix: Add remove_blocks() for deleting parts of files
Kim Alvefur <zash@zash.se>
parents: 13152
diff changeset
885 { "remove_blocks", lc_remove_blocks },
5044
4ef0dbfead53 util.pposix: Add fallocate method, backed by either posix_fallocate() or Linux fallocate()
Kim Alvefur <zash@zash.se>
parents: 4950
diff changeset
886
11656
c368b4f6ee04 util.pposix: Bind isatty(3)
Kim Alvefur <zash@zash.se>
parents: 10921
diff changeset
887 { "isatty", lc_isatty },
c368b4f6ee04 util.pposix: Bind isatty(3)
Kim Alvefur <zash@zash.se>
parents: 10921
diff changeset
888
2441
d72078946a16 util.pposix: Replace the unwieldy module table generation with luaL_register() call - side effect - it now sets the pposix global to the module table
Matthew Wild <mwild1@gmail.com>
parents: 2438
diff changeset
889 { NULL, NULL }
d72078946a16 util.pposix: Replace the unwieldy module table generation with luaL_register() call - side effect - it now sets the pposix global to the module table
Matthew Wild <mwild1@gmail.com>
parents: 2438
diff changeset
890 };
2438
819ba949c7bc util.pposix: Add pposix.umask(), bump version to 0.3.2 (and do the same in mod_posix)
Matthew Wild <mwild1@gmail.com>
parents: 2437
diff changeset
891
6411
6c8f6364bc48 util-src/*.c: Don't create globals when loaded
Kim Alvefur <zash@zash.se>
parents: 6156
diff changeset
892 lua_newtable(L);
6789
6b180e77c97a util-src/*.c: Invert Lua 5.2 compat to be 5.2+ by default and a macro to support 5.1
Kim Alvefur <zash@zash.se>
parents: 6642
diff changeset
893 luaL_setfuncs(L, exports, 0);
804
9bc1544c99b7 util.pposix: Add getuid/setuid (we don't use them yet)
Matthew Wild <mwild1@gmail.com>
parents: 796
diff changeset
894
7926
b009c27818c6 util.pposix: Expose ENOENT constant (usually 2, but you never know)
Kim Alvefur <zash@zash.se>
parents: 7919
diff changeset
895 #ifdef ENOENT
b009c27818c6 util.pposix: Expose ENOENT constant (usually 2, but you never know)
Kim Alvefur <zash@zash.se>
parents: 7919
diff changeset
896 lua_pushinteger(L, ENOENT);
b009c27818c6 util.pposix: Expose ENOENT constant (usually 2, but you never know)
Kim Alvefur <zash@zash.se>
parents: 7919
diff changeset
897 lua_setfield(L, -2, "ENOENT");
b009c27818c6 util.pposix: Expose ENOENT constant (usually 2, but you never know)
Kim Alvefur <zash@zash.se>
parents: 7919
diff changeset
898 #endif
b009c27818c6 util.pposix: Expose ENOENT constant (usually 2, but you never know)
Kim Alvefur <zash@zash.se>
parents: 7919
diff changeset
899
727
78c9542de94e pposix: Add _NAME and _VERSION
Matthew Wild <mwild1@gmail.com>
parents: 723
diff changeset
900 lua_pushliteral(L, "pposix");
78c9542de94e pposix: Add _NAME and _VERSION
Matthew Wild <mwild1@gmail.com>
parents: 723
diff changeset
901 lua_setfield(L, -2, "_NAME");
78c9542de94e pposix: Add _NAME and _VERSION
Matthew Wild <mwild1@gmail.com>
parents: 723
diff changeset
902
78c9542de94e pposix: Add _NAME and _VERSION
Matthew Wild <mwild1@gmail.com>
parents: 723
diff changeset
903 lua_pushliteral(L, MODULE_VERSION);
78c9542de94e pposix: Add _NAME and _VERSION
Matthew Wild <mwild1@gmail.com>
parents: 723
diff changeset
904 lua_setfield(L, -2, "_VERSION");
2436
ccc71b5d2e01 util.posix: Trailing whitespace
Matthew Wild <mwild1@gmail.com>
parents: 2060
diff changeset
905
586
b828d7d47973 Add posix support library, and adjust makefiles for it
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
906 return 1;
3966
e71c19dac1c7 util.pposix: Remove extraneous semicolon
Matthew Wild <mwild1@gmail.com>
parents: 3482
diff changeset
907 }
12976
a187600ec7d6 util: Add compat for prosody module name change to C sources
Kim Alvefur <zash@zash.se>
parents: 12575
diff changeset
908 int luaopen_util_pposix(lua_State *L) {
a187600ec7d6 util: Add compat for prosody module name change to C sources
Kim Alvefur <zash@zash.se>
parents: 12575
diff changeset
909 return luaopen_prosody_util_pposix(L);
a187600ec7d6 util: Add compat for prosody module name change to C sources
Kim Alvefur <zash@zash.se>
parents: 12575
diff changeset
910 }