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