1 #! /bin/sh /usr/share/dpatch/dpatch-run
2 ## 004_separate_file_and_sem_perms.dpatch by <divanov@creditreform.bg>
4 ## All lines beginning with `## DP:' are a description of the patch.
5 ## DP: Separate definitions for file and semaphore permissions
9 --- firebird2-1.5.2.orig/src/jrd/isc_sync.cpp
10 +++ firebird2-1.5.2/src/jrd/isc_sync.cpp
16 #define LOCAL_SEMAPHORES 4
17 +#define FILE_PERM 0666
18 +#if defined(SEM_R) && defined(SEM_A)
19 +#define SEM_PERM SEM_R | SEM_A | (SEM_R>>3) | (SEM_A>>3) \
20 + | (SEM_R>>6) | (SEM_A>>6)
22 +#define SEM_PERM FILE_PERM
24 +#if defined(SHM_R) && defined(SHM_W)
25 +#define SHM_PERM SHM_R | SHM_W | (SHM_R>>3) | (SHM_W>>3) \
26 + | (SHM_R>>6) | (SHM_W>>6)
28 +#define SHM_PERM FILE_PERM
32 #define GDS_RELAY "/bin/gds_relay"
35 /* Create the shared memory region if it doesn't already exist. */
37 - if ((shmid = shmget(key, length, IPC_CREAT | PRIV)) == -1)
38 + if ((shmid = shmget(key, length, IPC_CREAT | SHM_PERM)) == -1)
40 if (errno == EINVAL) {
41 /* There are two cases when shmget() returns EINVAL error:
43 way to get shmid is to attach to the segment with zero
46 - if ((shmid = shmget(key, 0, PRIV)) == -1) {
47 + if ((shmid = shmget(key, 0, SHM_PERM)) == -1) {
48 error(status_vector, "shmget", errno);
52 we use IPC_EXCL flag to get an error if by some miracle
53 the sagment with the same key is already exists
55 - if ((shmid = shmget(key, length, IPC_CREAT | IPC_EXCL | PRIV)) ==
56 + if ((shmid = shmget(key, length, IPC_CREAT | IPC_EXCL | SHM_PERM)) ==
58 error(status_vector, "shmget", errno);
64 - if ((shmid = shmget(key, length, IPC_CREAT | IPC_EXCL | PRIV)) ==
65 + if ((shmid = shmget(key, length, IPC_CREAT | IPC_EXCL | SHM_PERM)) ==
67 error(status_vector, "shmget", errno);
72 length = buf.shm_segsz;
73 - if ((shmid = shmget(key, length, PRIV)) == -1) {
74 + if ((shmid = shmget(key, length, SHM_PERM)) == -1) {
75 error(status_vector, "shmget", errno);
80 /* Now remap with the new-found length */
82 - if ((shmid = shmget(key, length, PRIV)) == -1) {
83 + if ((shmid = shmget(key, length, SHM_PERM)) == -1) {
84 error(status_vector, "shmget", errno);
88 /* Produce shared memory key for file */
90 if ((key = ftok(filename, FTOK_KEY)) == -1) {
91 - if ((fd = open(filename, O_RDWR | O_CREAT | O_TRUNC, PRIV)) == -1) {
92 + if ((fd = open(filename, O_RDWR | O_CREAT | O_TRUNC, FILE_PERM)) == -1) {
93 error(status_vector, "open", errno);
98 **************************************/
100 - SLONG semid = semget(key, 0, PRIV);
101 + SLONG semid = semget(key, 0, SEM_PERM);
103 error(status_vector, "semget", errno);
105 @@ -4251,7 +4263,7 @@
108 // Try to open existing semaphore set
109 - semid = semget(key, 0, PRIV);
110 + semid = semget(key, 0, SEM_PERM);
112 if (errno != ENOENT) {
113 error(status_vector, "semget", errno);
114 @@ -4278,8 +4290,8 @@
117 // Try to create new semaphore set
118 - semid = semget(key, semaphores, IPC_CREAT | IPC_EXCL | PRIV);
120 + semid = semget(key, semaphores, IPC_CREAT | IPC_EXCL | SEM_PERM);
124 if (errno != EEXIST) {