X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~mdw/git/disorder/blobdiff_plain/5978e3f9925313e6f2649170a2d61faa1b9ad988..ff92debd29cab62e0f824ca3e40914f64e0bcb05:/lib/client.c diff --git a/lib/client.c b/lib/client.c index 52c5b68..1967e0e 100644 --- a/lib/client.c +++ b/lib/client.c @@ -85,6 +85,8 @@ struct disorder_client { int open; /** @brief Socket I/O context */ struct socketio sio; + /** @brief Whether to try to open a privileged connection */ + int trypriv; }; /** @brief Create a new client @@ -100,9 +102,21 @@ disorder_client *disorder_new(int verbose) { c->verbose = verbose; c->family = -1; + c->trypriv = 1; return c; } +/** @brief Don't try to make a privileged connection + * @param c Client + * + * You must call this before any of the connection functions (e.g., + * disorder_connect(), disorder_connect_user()), if at all. + */ +void disorder_force_unpriv(disorder_client *c) { + assert(!c->open); + c->trypriv = 0; +} + /** @brief Return the address family used by this client */ int disorder_client_af(disorder_client *c) { return c->family; @@ -432,7 +446,9 @@ int disorder_connect_generic(struct config *conf, socklen_t salen; char errbuf[1024]; - if((salen = find_server(conf, &sa, &c->ident)) == (socklen_t)-1) + if((salen = disorder_find_server(conf, + (c->trypriv ? 0 : DISORDER_FS_NOTPRIV), + &sa, &c->ident)) == (socklen_t)-1) return -1; c->input = 0; c->output = 0;