Changeset d3307e2
- Timestamp:
- 2005-12-13T23:07:05Z (19 years ago)
- Branches:
- master
- Children:
- 6aaa221
- Parents:
- 34759e6 (diff), b73ac9c (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)
links above to see all the changes relative to each parent. - Files:
-
- 11 edited
Legend:
- Unmodified
- Added
- Removed
-
bitlbee.h
r34759e6 rd3307e2 116 116 help_t *help; 117 117 conf_t *conf; 118 storage_t *storage;118 GList *storage; /* The first backend in the list will be used for saving */ 119 119 char *helpfile; 120 120 GMainLoop *loop; -
commands.c
r34759e6 rd3307e2 86 86 int cmd_identify( irc_t *irc, char **cmd ) 87 87 { 88 storage_status_t status = global.storage->load( irc->nick, cmd[1], irc );88 storage_status_t status = storage_load( irc->nick, cmd[1], irc ); 89 89 90 90 switch (status) { … … 102 102 break; 103 103 } 104 104 105 105 return( 0 ); 106 106 } … … 115 115 116 116 irc_setpass( irc, cmd[1] ); 117 switch( global.storage->save( irc, FALSE )) {117 switch( storage_save( irc, FALSE )) { 118 118 case STORAGE_ALREADY_EXISTS: 119 119 irc_usermsg( irc, "Nick is already registered" ); … … 136 136 storage_status_t status; 137 137 138 status = global.storage->remove (irc->nick, cmd[1]);138 status = storage_remove (irc->nick, cmd[1]); 139 139 switch (status) { 140 140 case STORAGE_NO_SUCH_USER: … … 616 616 int cmd_save( irc_t *irc, char **cmd ) 617 617 { 618 if( global.storage->save( irc, TRUE ) == STORAGE_OK )618 if( storage_save( irc, TRUE ) == STORAGE_OK ) 619 619 irc_usermsg( irc, "Configuration saved" ); 620 620 else -
conf.c
r34759e6 rd3307e2 50 50 conf->nofork = 0; 51 51 conf->verbose = 0; 52 conf-> storage = "text";52 conf->primary_storage = "text"; 53 53 conf->runmode = RUNMODE_INETD; 54 54 conf->authmode = AUTHMODE_OPEN; … … 199 199 conf->motdfile = g_strdup( ini->value ); 200 200 } 201 else if( g_strcasecmp( ini->key, "storage" ) == 0 ) 202 { 203 g_free( conf->storage ); 204 conf->storage = g_strdup( ini->value ); 201 else if( g_strcasecmp( ini->key, "account_storage" ) == 0 ) 202 { 203 g_free( conf->primary_storage ); 204 conf->primary_storage = g_strdup( ini->value ); 205 } 206 else if( g_strcasecmp( ini->key, "account_storage_migrate" ) == 0 ) 207 { 208 g_strfreev( conf->migrate_storage ); 209 conf->migrate_storage = g_strsplit( ini->value, " \t,;", -1 ); 205 210 } 206 211 else if( g_strcasecmp( ini->key, "pinginterval" ) == 0 ) -
conf.h
r34759e6 rd3307e2 42 42 char *configdir; 43 43 char *motdfile; 44 char *storage; 44 char *primary_storage; 45 char **migrate_storage; 45 46 int ping_interval; 46 47 int ping_timeout; -
crypting.c
r34759e6 rd3307e2 29 29 the programs will be built. */ 30 30 31 #ifndef CRYPTING_MAIN32 #define BITLBEE_CORE33 #include "bitlbee.h"34 #include "irc.h"35 31 #include "md5.h" 36 32 #include "crypting.h" … … 38 34 #include <stdio.h> 39 35 #include <stdlib.h> 40 41 #else42 43 typedef struct irc44 {45 char *password;46 } irc_t;47 48 #include "md5.h"49 #include "crypting.h"50 #include <string.h>51 #include <stdio.h>52 #include <stdlib.h>53 54 #endif55 36 56 37 /*\ … … 83 64 84 65 85 char *hashpass (irc_t *irc) { 66 char *hashpass (const char *password) 67 { 86 68 md5_state_t md5state; 87 69 md5_byte_t digest[16]; … … 90 72 char *rv; 91 73 92 if ( irc->password == NULL) return (NULL);74 if (password == NULL) return (NULL); 93 75 94 rv = (char *)g_malloc (33); 95 memset (rv, 0, 33); 76 rv = g_new0 (char, 33); 96 77 97 78 md5_init (&md5state); 98 md5_append (&md5state, ( unsigned char *)irc->password, strlen (irc->password));79 md5_append (&md5state, (const unsigned char *)password, strlen (password)); 99 80 md5_finish (&md5state, digest); 100 81 … … 108 89 } 109 90 110 char *obfucrypt ( irc_t *irc, char *line)91 char *obfucrypt (char *line, const char *password) 111 92 { 112 93 int i, j; 113 94 char *rv; 114 95 115 if ( irc->password == NULL) return (NULL);96 if (password == NULL) return (NULL); 116 97 117 rv = g_new0 (char, strlen (line) + 1);98 rv = g_new0 (char, strlen (line) + 1); 118 99 119 100 i = j = 0; … … 121 102 /* Encrypt/obfuscate the line, using the password */ 122 103 if (*(signed char*)line < 0) *line = - (*line); 123 if (((signed char*)irc->password)[i] < 0) irc->password[i] = - irc->password[i];124 104 125 rv[j] = *line + irc->password[i]; /* Overflow intended */105 rv[j] = *line + password[i]; /* Overflow intended */ 126 106 127 107 line++; 128 if (! irc->password[++i]) i = 0;108 if (!password[++i]) i = 0; 129 109 j++; 130 110 } … … 133 113 } 134 114 135 char *deobfucrypt ( irc_t *irc, char *line)115 char *deobfucrypt (char *line, const char *password) 136 116 { 137 117 int i, j; 138 118 char *rv; 139 119 140 if ( irc->password == NULL) return (NULL);120 if (password == NULL) return (NULL); 141 121 142 rv = g_new0 (char, strlen (line) + 1);122 rv = g_new0 (char, strlen (line) + 1); 143 123 144 124 i = j = 0; 145 125 while (*line) { 146 126 /* Decrypt/deobfuscate the line, using the pass */ 147 rv[j] = *line - irc->password[i]; /* Overflow intended */127 rv[j] = *line - password[i]; /* Overflow intended */ 148 128 149 129 line++; 150 if (! irc->password[++i]) i = 0;130 if (!password[++i]) i = 0; 151 131 j++; 152 132 } … … 162 142 int main( int argc, char *argv[] ) 163 143 { 164 irc_t *irc = g_new0( irc_t, 1 );165 144 char *hash, *action, line[256]; 166 char* (*func)( irc_t *,char * );145 char* (*func)( char *, const char * ); 167 146 168 147 if( argc < 2 ) … … 174 153 } 175 154 176 irc->password = g_strdup( argv[1] ); 177 178 hash = hashpass( irc ); 155 hash = hashpass( argv[1] ); 179 156 action = argv[0] + strlen( argv[0] ) - strlen( "encode" ); 180 157 … … 208 185 fgetc( stdin ); 209 186 210 out = func( irc, line);187 out = func( line, argv[1] ); 211 188 printf( "%s\n", out ); 212 189 g_free( out ); -
crypting.h
r34759e6 rd3307e2 25 25 26 26 int checkpass (const char *password, const char *md5sum); 27 char *hashpass ( irc_t *irc);28 char *obfucrypt ( irc_t *irc, char *line);29 char *deobfucrypt ( irc_t *irc, char *line);27 char *hashpass (const char *password); 28 char *obfucrypt (char *line, const char *password); 29 char *deobfucrypt (char *line, const char *password); -
irc.c
r34759e6 rd3307e2 161 161 162 162 if( irc->status >= USTATUS_IDENTIFIED && set_getint( irc, "save_on_quit" ) ) 163 if( !global.storage->save( irc, TRUE ))163 if( storage_save( irc, TRUE ) != STORAGE_OK ) 164 164 irc_usermsg( irc, "Error while saving settings!" ); 165 165 -
storage.c
r34759e6 rd3307e2 38 38 } 39 39 40 st orage_t *storage_init(const char *name)40 static storage_t *storage_init_single(const char *name) 41 41 { 42 42 GList *gl; … … 57 57 return st; 58 58 } 59 60 GList *storage_init(const char *primary, char **migrate) 61 { 62 GList *ret = NULL; 63 int i; 64 storage_t *storage; 65 66 storage = storage_init_single(primary); 67 if (storage == NULL) 68 return NULL; 69 70 ret = g_list_append(ret, storage); 71 72 for (i = 0; migrate && migrate[i]; i++) { 73 storage = storage_init_single(migrate[i]); 74 75 if (storage) 76 ret = g_list_append(ret, storage); 77 } 78 79 return ret; 80 } 81 82 storage_status_t storage_check_pass (const char *nick, const char *password) 83 { 84 GList *gl; 85 86 /* Loop until we don't get NO_SUCH_USER */ 87 88 for (gl = global.storage; gl; gl = gl->next) { 89 storage_t *st = gl->data; 90 storage_status_t status; 91 92 status = st->check_pass(nick, password); 93 if (status != STORAGE_NO_SUCH_USER) 94 return status; 95 } 96 97 return STORAGE_NO_SUCH_USER; 98 } 99 100 storage_status_t storage_load (const char *nick, const char *password, irc_t * irc) 101 { 102 GList *gl; 103 104 /* Loop until we don't get NO_SUCH_USER */ 105 for (gl = global.storage; gl; gl = gl->next) { 106 storage_t *st = gl->data; 107 storage_status_t status; 108 109 status = st->load(nick, password, irc); 110 if (status == STORAGE_OK) { 111 irc_setpass(irc, password); 112 return status; 113 } 114 115 if (status != STORAGE_NO_SUCH_USER) 116 return status; 117 } 118 119 return STORAGE_NO_SUCH_USER; 120 } 121 122 storage_status_t storage_save (irc_t *irc, int overwrite) 123 { 124 return ((storage_t *)global.storage->data)->save(irc, overwrite); 125 } 126 127 storage_status_t storage_remove (const char *nick, const char *password) 128 { 129 GList *gl; 130 storage_status_t ret = STORAGE_OK; 131 132 /* Remove this account from all storage backends. If this isn't 133 * done, the account will still be usable, it'd just be 134 * loaded from a different backend. */ 135 for (gl = global.storage; gl; gl = gl->next) { 136 storage_t *st = gl->data; 137 storage_status_t status; 138 139 status = st->remove(nick, password); 140 if (status != STORAGE_NO_SUCH_USER && 141 status != STORAGE_OK) 142 ret = status; 143 } 144 145 return ret; 146 } 147 148 storage_status_t storage_rename (const char *onick, const char *nnick, const char *password) 149 { 150 storage_status_t status; 151 GList *gl = global.storage; 152 storage_t *primary_storage = gl->data; 153 irc_t *irc; 154 155 /* First, try to rename in the current write backend, assuming onick 156 * is stored there */ 157 status = primary_storage->rename(onick, nnick, password); 158 if (status != STORAGE_NO_SUCH_USER) 159 return status; 160 161 /* Try to load from a migration backend and save to the current backend. 162 * Explicitly remove the account from the migration backend as otherwise 163 * it'd still be usable under the old name */ 164 165 irc = g_new0(irc_t, 1); 166 status = storage_load(onick, password, irc); 167 if (status != STORAGE_OK) { 168 irc_free(irc); 169 return status; 170 } 171 172 g_free(irc->nick); 173 irc->nick = g_strdup(nnick); 174 175 status = storage_save(irc, FALSE); 176 if (status != STORAGE_OK) { 177 irc_free(irc); 178 return status; 179 } 180 irc_free(irc); 181 182 storage_remove(onick, password); 183 184 return STORAGE_OK; 185 } -
storage.h
r34759e6 rd3307e2 53 53 } storage_t; 54 54 55 storage_status_t storage_check_pass (const char *nick, const char *password); 56 57 storage_status_t storage_load (const char *nick, const char *password, irc_t * irc); 58 storage_status_t storage_save (irc_t *irc, int overwrite); 59 storage_status_t storage_remove (const char *nick, const char *password); 60 61 storage_status_t storage_rename (const char *onick, const char *nnick, const char *password); 62 55 63 void register_storage_backend(storage_t *); 56 storage_t *storage_init(const char *name);64 GList *storage_init(const char *primary, char **migrate); 57 65 58 66 #endif /* __STORAGE_H__ */ -
storage_text.c
r34759e6 rd3307e2 67 67 { 68 68 fgetc( fp ); 69 line = deobfucrypt( irc, s ); 69 line = deobfucrypt( s, password ); 70 if (line == NULL) return STORAGE_OTHER_ERROR; 70 71 root_command_string( irc, ru, line, 0 ); 71 72 g_free( line ); … … 129 130 \*/ 130 131 131 hash = hashpass( irc );132 hash = hashpass( irc->password ); 132 133 if( hash == NULL ) 133 134 { 134 135 irc_usermsg( irc, "Please register yourself if you want to save your settings." ); 135 return ( 0 );136 return STORAGE_OTHER_ERROR; 136 137 } 137 138 … … 192 193 proto_name[a->protocol], a->user, a->pass, a->server ? a->server : "" ); 193 194 194 line = obfucrypt( irc, s);195 line = obfucrypt( s, irc->password ); 195 196 if( *line ) 196 197 { … … 210 211 { 211 212 g_snprintf( s, sizeof( s ), "set %s \"%s\"", set->key, set->value ); 212 line = obfucrypt( irc, s);213 line = obfucrypt( s, irc->password ); 213 214 if( *line ) 214 215 { … … 227 228 { 228 229 g_snprintf( s, sizeof( s ), "rename %s %s", ROOT_NICK, irc->mynick ); 229 line = obfucrypt( irc, s);230 line = obfucrypt( s, irc->password ); 230 231 if( *line ) 231 232 { … … 270 271 FILE *fp; 271 272 272 g_snprintf( s, 511, "%s%s%s", global.conf->configdir, nick, ". nicks" );273 g_snprintf( s, 511, "%s%s%s", global.conf->configdir, nick, ".accounts" ); 273 274 fp = fopen( s, "r" ); 274 275 if (!fp) -
unix.c
r34759e6 rd3307e2 72 72 return( i ); 73 73 74 global.storage = storage_init( global.conf->storage ); 74 global.storage = storage_init( global.conf->primary_storage, 75 global.conf->migrate_storage ); 75 76 if ( global.storage == NULL) { 76 log_message( LOGLVL_ERROR, " No such storage backend '%s'", global.conf->storage );77 log_message( LOGLVL_ERROR, "Unable to load storage backend '%s'", global.conf->primary_storage ); 77 78 return( 1 ); 78 79 }
Note: See TracChangeset
for help on using the changeset viewer.