16fb0d4b062af22e3576b8c48027710d10d764e34Elly Fong-Jones/* 26fb0d4b062af22e3576b8c48027710d10d764e34Elly Fong-Jones * util.h - routeup/tlsdated utility functions 36fb0d4b062af22e3576b8c48027710d10d764e34Elly Fong-Jones * Copyright (c) 2012 The Chromium Authors. All rights reserved. 46fb0d4b062af22e3576b8c48027710d10d764e34Elly Fong-Jones * Use of this source code is governed by a BSD-style license that can be 56fb0d4b062af22e3576b8c48027710d10d764e34Elly Fong-Jones * found in the LICENSE file. 66fb0d4b062af22e3576b8c48027710d10d764e34Elly Fong-Jones */ 76fb0d4b062af22e3576b8c48027710d10d764e34Elly Fong-Jones 86fb0d4b062af22e3576b8c48027710d10d764e34Elly Fong-Jones#ifndef UTIL_H 96fb0d4b062af22e3576b8c48027710d10d764e34Elly Fong-Jones#define UTIL_H 106fb0d4b062af22e3576b8c48027710d10d764e34Elly Fong-Jones 116fb0d4b062af22e3576b8c48027710d10d764e34Elly Fong-Jones#include <errno.h> 126fb0d4b062af22e3576b8c48027710d10d764e34Elly Fong-Jones#include <string.h> 13c88a9f7f976f8495fcf27717a292bd1070828192Jacob Appelbaum#include <stdlib.h> 14d00526018524956084364987edecbfa40321d0d9Fabian Keil#include <unistd.h> 156fb0d4b062af22e3576b8c48027710d10d764e34Elly Fong-Jones 161cfe6cf10d1a7f397d0fff8c8bcb60667c30b1dbJacob Appelbaum#ifdef HAVE_PRCTL 171cfe6cf10d1a7f397d0fff8c8bcb60667c30b1dbJacob Appelbaum#include <sys/prctl.h> 18733df00516d22ef63b891a29d18704d963fdb632Jacob Appelbaum#ifndef PR_SET_NO_NEW_PRIVS 19733df00516d22ef63b891a29d18704d963fdb632Jacob Appelbaum# define PR_SET_NO_NEW_PRIVS 38 20733df00516d22ef63b891a29d18704d963fdb632Jacob Appelbaum#endif 21182abd405bd9847448298d44192d052d3820a81dJacob Appelbaum#ifndef PR_GET_NO_NEW_PRIVS 22182abd405bd9847448298d44192d052d3820a81dJacob Appelbaum# define PR_GET_NO_NEW_PRIVS 39 23182abd405bd9847448298d44192d052d3820a81dJacob Appelbaum#endif 241cfe6cf10d1a7f397d0fff8c8bcb60667c30b1dbJacob Appelbaum#endif 251cfe6cf10d1a7f397d0fff8c8bcb60667c30b1dbJacob Appelbaum 269c331bf201909fb5a85725202eee872d4323e12dWill Drewry#include "src/rtc.h" 279c331bf201909fb5a85725202eee872d4323e12dWill Drewry 28f0f17b98fa4c2a5a20a255be4b631d9e3d8bf704Jacob Appelbaum#ifdef TARGET_OS_HAIKU 29f0f17b98fa4c2a5a20a255be4b631d9e3d8bf704Jacob Appelbaum#include <stdarg.h> 30f0f17b98fa4c2a5a20a255be4b631d9e3d8bf704Jacob Appelbaum#endif 31f0f17b98fa4c2a5a20a255be4b631d9e3d8bf704Jacob Appelbaum 326fb0d4b062af22e3576b8c48027710d10d764e34Elly Fong-Jones#define API __attribute__((visibility("default"))) 336fb0d4b062af22e3576b8c48027710d10d764e34Elly Fong-Jones 34aa04c0126a590fc9646d491151bcbfeed34ba693ellyextern const char *kTempSuffix; 35c45952f88c568046a02bc0aea793008d8bb37755Will Drewry#define IGNORE_EINTR(expr) ({ \ 36c45952f88c568046a02bc0aea793008d8bb37755Will Drewry typeof(expr) _r; \ 37c45952f88c568046a02bc0aea793008d8bb37755Will Drewry while ((_r = (expr)) == -1 && errno == EINTR); \ 38c45952f88c568046a02bc0aea793008d8bb37755Will Drewry _r; \ 39c45952f88c568046a02bc0aea793008d8bb37755Will Drewry}) 40aa04c0126a590fc9646d491151bcbfeed34ba693elly 41b24f342311f93ff61a73ba4628dc173d09c50413Jacob Appelbaumextern int verbose; 42232fa7e93cd02d176ba2501d8d0e6614b2563ac0Jacob Appelbaumextern int verbose_debug; 43c9b803bcf0e0923dceecb47f2d0deac416f82373Jacob Appelbaumvoid initalize_syslog (void); 4482853f9cb8f8f2e11041046d9957a9483d2e2102Jacob Appelbaumvoid terminate_syslog (void); 45c88a9f7f976f8495fcf27717a292bd1070828192Jacob Appelbaumvoid die (const char *fmt, ...); 46c88a9f7f976f8495fcf27717a292bd1070828192Jacob Appelbaumvoid verb (const char *fmt, ...); 47c45952f88c568046a02bc0aea793008d8bb37755Will Drewryextern void logat (int isverbose, const char *fmt, ...); 48c45952f88c568046a02bc0aea793008d8bb37755Will Drewry 4947313d1f1ae3749f69ad0344e8125f1d61f6faedWill Drewry#define verb_debug debug 5047313d1f1ae3749f69ad0344e8125f1d61f6faedWill Drewry#define debug(fmt, ...) if (verbose_debug) logat(1, fmt, ## __VA_ARGS__) 51523304f84539c2fc0bd802e106fe37327c595405Jacob Appelbaum#define info(fmt, ...) logat(0, fmt, ## __VA_ARGS__) 526fb0d4b062af22e3576b8c48027710d10d764e34Elly Fong-Jones#define pinfo(fmt, ...) logat(1, fmt ": %s", ## __VA_ARGS__, strerror(errno)) 536fb0d4b062af22e3576b8c48027710d10d764e34Elly Fong-Jones#define error(fmt, ...) logat(0, fmt, ## __VA_ARGS__) 546fb0d4b062af22e3576b8c48027710d10d764e34Elly Fong-Jones#define perror(fmt, ...) logat(0, fmt ": %s", ## __VA_ARGS__, strerror(errno)) 556fb0d4b062af22e3576b8c48027710d10d764e34Elly Fong-Jones#define fatal(fmt, ...) do { logat(0, fmt, ## __VA_ARGS__); exit(1); } while (0) 566fb0d4b062af22e3576b8c48027710d10d764e34Elly Fong-Jones#define pfatal(fmt, ...) do { \ 578d751a0168e8c392df88327709e482f6d6375ccbJacob Appelbaum logat(0, fmt ": %s", ## __VA_ARGS__, strerror(errno)); \ 588d751a0168e8c392df88327709e482f6d6375ccbJacob Appelbaum exit(1); \ 596fb0d4b062af22e3576b8c48027710d10d764e34Elly Fong-Jones} while (0) 606fb0d4b062af22e3576b8c48027710d10d764e34Elly Fong-Jones 61c45952f88c568046a02bc0aea793008d8bb37755Will Drewrystatic inline int min (int x, int y) 62c45952f88c568046a02bc0aea793008d8bb37755Will Drewry{ 63c45952f88c568046a02bc0aea793008d8bb37755Will Drewry return x < y ? x : y; 64c45952f88c568046a02bc0aea793008d8bb37755Will Drewry} 65a9e52fe816b570da68138394c4884c7db7171580Elly Fong-Jones 66aab9382297008c1d1b7cef361159a44885d52af0Gilad Arnoldvoid drop_privs_to (const char *user, const char *group, 67aab9382297008c1d1b7cef361159a44885d52af0Gilad Arnold const char **supp_groups); 68eaa686f75374a6c2807b976dfaf65620a57421c4Jacob Appelbaumvoid no_new_privs (void); 69c45952f88c568046a02bc0aea793008d8bb37755Will Drewryconst char *sync_type_str (int sync_type); 70c45952f88c568046a02bc0aea793008d8bb37755Will Drewry 71c45952f88c568046a02bc0aea793008d8bb37755Will Drewrystruct state; 72c45952f88c568046a02bc0aea793008d8bb37755Will Drewryenum event_id_t; 73c45952f88c568046a02bc0aea793008d8bb37755Will Drewryvoid trigger_event (struct state *state, enum event_id_t e, int sec); 74a5e7fbb012f155b0a37c09e1c42989bc4988fce9Elly Fong-Jones 75aa04c0126a590fc9646d491151bcbfeed34ba693ellystruct platform { 769c331bf201909fb5a85725202eee872d4323e12dWill Drewry int (*rtc_open)(struct rtc_handle *); 779c331bf201909fb5a85725202eee872d4323e12dWill Drewry int (*rtc_write)(struct rtc_handle *, const struct timeval *tv); 789c331bf201909fb5a85725202eee872d4323e12dWill Drewry int (*rtc_read)(struct rtc_handle *, struct timeval *tv); 799c331bf201909fb5a85725202eee872d4323e12dWill Drewry int (*rtc_close)(struct rtc_handle *); 80aa04c0126a590fc9646d491151bcbfeed34ba693elly 819c331bf201909fb5a85725202eee872d4323e12dWill Drewry int (*file_open)(const char *path, int write, int cloexec); 829c331bf201909fb5a85725202eee872d4323e12dWill Drewry int (*file_close)(int fd); 839c331bf201909fb5a85725202eee872d4323e12dWill Drewry /* Atomic file write and read */ 849c331bf201909fb5a85725202eee872d4323e12dWill Drewry int (*file_write)(int fd, void *buf, size_t sz); 859c331bf201909fb5a85725202eee872d4323e12dWill Drewry int (*file_read)(int fd, void *buf, size_t sz); 86aa04c0126a590fc9646d491151bcbfeed34ba693elly 87aa04c0126a590fc9646d491151bcbfeed34ba693elly int (*time_get)(struct timeval *tv); 88aa04c0126a590fc9646d491151bcbfeed34ba693elly 89aa04c0126a590fc9646d491151bcbfeed34ba693elly int (*pgrp_enter)(void); 90aa04c0126a590fc9646d491151bcbfeed34ba693elly int (*pgrp_kill)(void); 919c331bf201909fb5a85725202eee872d4323e12dWill Drewry 929c331bf201909fb5a85725202eee872d4323e12dWill Drewry int (*process_signal)(pid_t pid, int sig); 939c331bf201909fb5a85725202eee872d4323e12dWill Drewry int (*process_wait)(pid_t pid, int *status, int timeout); 94aa04c0126a590fc9646d491151bcbfeed34ba693elly}; 95aa04c0126a590fc9646d491151bcbfeed34ba693elly 96aa04c0126a590fc9646d491151bcbfeed34ba693ellyextern struct platform *platform; 97aa04c0126a590fc9646d491151bcbfeed34ba693elly 986fb0d4b062af22e3576b8c48027710d10d764e34Elly Fong-Jones#endif /* !UTIL_H */ 99