xref: /haiku/src/system/libnetwork/r5_compatibility.cpp (revision aa6411e23e78610d8eecaa4de48b6c71c994fbf3)
1*aa6411e2SAugustin Cavalier /*
2*aa6411e2SAugustin Cavalier  * Copyright 2002-2006, Haiku, Inc. All Rights Reserved.
3*aa6411e2SAugustin Cavalier  * Distributed under the terms of the MIT License.
4*aa6411e2SAugustin Cavalier  *
5*aa6411e2SAugustin Cavalier  * Authors:
6*aa6411e2SAugustin Cavalier  *		Philippe Houdoin
7*aa6411e2SAugustin Cavalier  *		Jérôme Duval, korli@users.berlios.de
8*aa6411e2SAugustin Cavalier  *		Axel Dörfler, axeld@pinc-software.de
9*aa6411e2SAugustin Cavalier  */
10*aa6411e2SAugustin Cavalier 
11*aa6411e2SAugustin Cavalier 
12*aa6411e2SAugustin Cavalier #include <SupportDefs.h>
13*aa6411e2SAugustin Cavalier #include <TLS.h>
14*aa6411e2SAugustin Cavalier 
15*aa6411e2SAugustin Cavalier #include <stdio.h>
16*aa6411e2SAugustin Cavalier #include <string.h>
17*aa6411e2SAugustin Cavalier #include <unistd.h>
18*aa6411e2SAugustin Cavalier 
19*aa6411e2SAugustin Cavalier 
20*aa6411e2SAugustin Cavalier struct net_settings;
21*aa6411e2SAugustin Cavalier 
22*aa6411e2SAugustin Cavalier extern "C" {
23*aa6411e2SAugustin Cavalier 	int *_h_errnop(void);
24*aa6411e2SAugustin Cavalier 	int _netstat(int fd, char **output, int verbose);
25*aa6411e2SAugustin Cavalier 	int _socket_interrupt(void);
26*aa6411e2SAugustin Cavalier 	int closesocket(int socket);
27*aa6411e2SAugustin Cavalier 	char *find_net_setting(net_settings* settings, const char* heading,
28*aa6411e2SAugustin Cavalier 		const char* name, char* value, unsigned numBytes);
29*aa6411e2SAugustin Cavalier 	status_t set_net_setting(net_settings* settings, const char* heading,
30*aa6411e2SAugustin Cavalier 		const char* name, const char* value);
31*aa6411e2SAugustin Cavalier 	int getusername(char *user, size_t bufferLength);
32*aa6411e2SAugustin Cavalier 	int getpassword(char *password, size_t bufferLength);
33*aa6411e2SAugustin Cavalier 	char *_netconfig_find(const char *heaading, const char *name, char *value, int nbytes);
34*aa6411e2SAugustin Cavalier }
35*aa6411e2SAugustin Cavalier 
36*aa6411e2SAugustin Cavalier 
37*aa6411e2SAugustin Cavalier int32 __gHErrnoTLS = tls_allocate();
38*aa6411e2SAugustin Cavalier 
39*aa6411e2SAugustin Cavalier 
40*aa6411e2SAugustin Cavalier int *
_h_errnop(void)41*aa6411e2SAugustin Cavalier _h_errnop(void)
42*aa6411e2SAugustin Cavalier {
43*aa6411e2SAugustin Cavalier 	return (int *)tls_address(__gHErrnoTLS);
44*aa6411e2SAugustin Cavalier }
45*aa6411e2SAugustin Cavalier 
46*aa6411e2SAugustin Cavalier 
47*aa6411e2SAugustin Cavalier int
_netstat(int fd,char ** output,int verbose)48*aa6411e2SAugustin Cavalier _netstat(int fd, char **output, int verbose)
49*aa6411e2SAugustin Cavalier {
50*aa6411e2SAugustin Cavalier 	return ENOSYS;
51*aa6411e2SAugustin Cavalier }
52*aa6411e2SAugustin Cavalier 
53*aa6411e2SAugustin Cavalier 
54*aa6411e2SAugustin Cavalier int
_socket_interrupt(void)55*aa6411e2SAugustin Cavalier _socket_interrupt(void)
56*aa6411e2SAugustin Cavalier {
57*aa6411e2SAugustin Cavalier 	return -1;
58*aa6411e2SAugustin Cavalier }
59*aa6411e2SAugustin Cavalier 
60*aa6411e2SAugustin Cavalier 
61*aa6411e2SAugustin Cavalier int
closesocket(int socket)62*aa6411e2SAugustin Cavalier closesocket(int socket)
63*aa6411e2SAugustin Cavalier {
64*aa6411e2SAugustin Cavalier 	return close(socket);
65*aa6411e2SAugustin Cavalier }
66*aa6411e2SAugustin Cavalier 
67*aa6411e2SAugustin Cavalier 
68*aa6411e2SAugustin Cavalier /* TODO: This is a terrible hack :(
69*aa6411e2SAugustin Cavalier  * TODO: We should really get these settings values by parsing the real settings
70*aa6411e2SAugustin Cavalier  */
71*aa6411e2SAugustin Cavalier 
72*aa6411e2SAugustin Cavalier char *
find_net_setting(net_settings * settings,const char * heading,const char * name,char * value,unsigned numBytes)73*aa6411e2SAugustin Cavalier find_net_setting(net_settings* settings, const char* heading,
74*aa6411e2SAugustin Cavalier 	const char* name, char* value, unsigned numBytes)
75*aa6411e2SAugustin Cavalier {
76*aa6411e2SAugustin Cavalier 	if (strcmp(heading, "GLOBAL") != 0)
77*aa6411e2SAugustin Cavalier 		return NULL;
78*aa6411e2SAugustin Cavalier 
79*aa6411e2SAugustin Cavalier 	if (!strcmp(name, "HOSTNAME"))
80*aa6411e2SAugustin Cavalier 		strlcpy(value, "hostname", numBytes);
81*aa6411e2SAugustin Cavalier 	else if (!strcmp(name, "USERNAME"))
82*aa6411e2SAugustin Cavalier 		strlcpy(value, "baron", numBytes);
83*aa6411e2SAugustin Cavalier 	else if (!strcmp(name, "PASSWORD"))
84*aa6411e2SAugustin Cavalier 		strlcpy(value, "password", numBytes);
85*aa6411e2SAugustin Cavalier 	else if (!strcmp(name, "FTP_ENABLED"))
86*aa6411e2SAugustin Cavalier 		strlcpy(value, "1", numBytes);
87*aa6411e2SAugustin Cavalier 	else if (!strcmp(name, "TELNETD_ENABLED"))
88*aa6411e2SAugustin Cavalier 		strlcpy(value, "1", numBytes);
89*aa6411e2SAugustin Cavalier 	else
90*aa6411e2SAugustin Cavalier 		return NULL;
91*aa6411e2SAugustin Cavalier 
92*aa6411e2SAugustin Cavalier 	return value;
93*aa6411e2SAugustin Cavalier }
94*aa6411e2SAugustin Cavalier 
95*aa6411e2SAugustin Cavalier 
96*aa6411e2SAugustin Cavalier status_t
set_net_setting(net_settings * settings,const char * heading,const char * name,const char * value)97*aa6411e2SAugustin Cavalier set_net_setting(net_settings* settings, const char* heading,
98*aa6411e2SAugustin Cavalier 	const char* name, const char* value)
99*aa6411e2SAugustin Cavalier {
100*aa6411e2SAugustin Cavalier 	return B_UNSUPPORTED;
101*aa6411e2SAugustin Cavalier }
102*aa6411e2SAugustin Cavalier 
103*aa6411e2SAugustin Cavalier 
104*aa6411e2SAugustin Cavalier int
getusername(char * user,size_t length)105*aa6411e2SAugustin Cavalier getusername(char *user, size_t length)
106*aa6411e2SAugustin Cavalier {
107*aa6411e2SAugustin Cavalier 	if (find_net_setting(NULL, "GLOBAL", "USERNAME", user, length) == NULL)
108*aa6411e2SAugustin Cavalier 		return B_ERROR;
109*aa6411e2SAugustin Cavalier 
110*aa6411e2SAugustin Cavalier 	return strlen(user);
111*aa6411e2SAugustin Cavalier }
112*aa6411e2SAugustin Cavalier 
113*aa6411e2SAugustin Cavalier 
114*aa6411e2SAugustin Cavalier int
getpassword(char * password,size_t length)115*aa6411e2SAugustin Cavalier getpassword(char *password, size_t length)
116*aa6411e2SAugustin Cavalier {
117*aa6411e2SAugustin Cavalier 	if (find_net_setting(NULL, "GLOBAL", "PASSWORD", password, length) == NULL)
118*aa6411e2SAugustin Cavalier 		return B_ERROR;
119*aa6411e2SAugustin Cavalier 
120*aa6411e2SAugustin Cavalier 	return strlen(password);
121*aa6411e2SAugustin Cavalier }
122*aa6411e2SAugustin Cavalier 
123*aa6411e2SAugustin Cavalier char *
_netconfig_find(const char * heading,const char * name,char * value,int nbytes)124*aa6411e2SAugustin Cavalier _netconfig_find(const char *heading, const char *name, char *value, int nbytes)
125*aa6411e2SAugustin Cavalier {
126*aa6411e2SAugustin Cavalier 	return find_net_setting(NULL, heading, name, value, nbytes);
127*aa6411e2SAugustin Cavalier }
128