Changes in / [ddcff199:c77406a]
Legend:
- Unmodified
- Added
- Removed
-
otr.c
rddcff199 rc77406a 185 185 /* find a private key by fingerprint prefix (given as any number of hex strings) */ 186 186 OtrlPrivKey *match_privkey(irc_t *irc, const char **args); 187 188 /* check whether a string is safe to use in a path component */189 int strsane(const char *s);190 187 191 188 /* functions to be called for certain events */ … … 278 275 int kg=0; 279 276 280 if(strsane(irc->user->nick)) { 281 g_snprintf(s, 511, "%s%s.otr_keys", global.conf->configdir, irc->user->nick); 282 e = otrl_privkey_read(irc->otr->us, s); 283 if(e && e!=enoent) { 284 irc_rootmsg(irc, "otr load: %s: %s", s, gcry_strerror(e)); 285 } 286 g_snprintf(s, 511, "%s%s.otr_fprints", global.conf->configdir, irc->user->nick); 287 e = otrl_privkey_read_fingerprints(irc->otr->us, s, NULL, NULL); 288 if(e && e!=enoent) { 289 irc_rootmsg(irc, "otr load: %s: %s", s, gcry_strerror(e)); 290 } 277 g_snprintf(s, 511, "%s%s.otr_keys", global.conf->configdir, irc->user->nick); 278 e = otrl_privkey_read(irc->otr->us, s); 279 if(e && e!=enoent) { 280 irc_rootmsg(irc, "otr load: %s: %s", s, gcry_strerror(e)); 281 } 282 g_snprintf(s, 511, "%s%s.otr_fprints", global.conf->configdir, irc->user->nick); 283 e = otrl_privkey_read_fingerprints(irc->otr->us, s, NULL, NULL); 284 if(e && e!=enoent) { 285 irc_rootmsg(irc, "otr load: %s: %s", s, gcry_strerror(e)); 291 286 } 292 287 … … 311 306 gcry_error_t e; 312 307 313 if(strsane(irc->user->nick)) { 314 g_snprintf(s, 511, "%s%s.otr_fprints", global.conf->configdir, irc->user->nick); 315 e = otrl_privkey_write_fingerprints(irc->otr->us, s); 316 if(e) { 317 irc_rootmsg(irc, "otr save: %s: %s", s, gcry_strerror(e)); 318 } 319 chmod(s, 0600); 320 } 308 g_snprintf(s, 511, "%s%s.otr_fprints", global.conf->configdir, irc->user->nick); 309 e = otrl_privkey_write_fingerprints(irc->otr->us, s); 310 if(e) { 311 irc_rootmsg(irc, "otr save: %s: %s", s, gcry_strerror(e)); 312 } 313 chmod(s, 0600); 321 314 } 322 315 … … 325 318 char s[512]; 326 319 327 if(strsane(nick)) { 328 g_snprintf(s, 511, "%s%s.otr_keys", global.conf->configdir, nick); 329 unlink(s); 330 g_snprintf(s, 511, "%s%s.otr_fprints", global.conf->configdir, nick); 331 unlink(s); 332 } 320 g_snprintf(s, 511, "%s%s.otr_keys", global.conf->configdir, nick); 321 unlink(s); 322 g_snprintf(s, 511, "%s%s.otr_fprints", global.conf->configdir, nick); 323 unlink(s); 333 324 } 334 325 … … 337 328 char s[512], t[512]; 338 329 339 if(strsane(nnick) && strsane(onick)) { 340 g_snprintf(s, 511, "%s%s.otr_keys", global.conf->configdir, onick); 341 g_snprintf(t, 511, "%s%s.otr_keys", global.conf->configdir, nnick); 342 rename(s,t); 343 g_snprintf(s, 511, "%s%s.otr_fprints", global.conf->configdir, onick); 344 g_snprintf(t, 511, "%s%s.otr_fprints", global.conf->configdir, nnick); 345 rename(s,t); 346 } 330 g_snprintf(s, 511, "%s%s.otr_keys", global.conf->configdir, onick); 331 g_snprintf(t, 511, "%s%s.otr_keys", global.conf->configdir, nnick); 332 rename(s,t); 333 g_snprintf(s, 511, "%s%s.otr_fprints", global.conf->configdir, onick); 334 g_snprintf(t, 511, "%s%s.otr_fprints", global.conf->configdir, nnick); 335 rename(s,t); 347 336 } 348 337 … … 1788 1777 irc_rootmsg(irc, "%s", msg); 1789 1778 if(filename[0]) { 1790 if(strsane(irc->user->nick)) { 1791 char *kf = g_strdup_printf("%s%s.otr_keys", global.conf->configdir, irc->user->nick); 1792 char *tmp = g_strdup_printf("%s.new", kf); 1793 copyfile(filename, tmp); 1794 unlink(filename); 1795 rename(tmp,kf); 1796 otrl_privkey_read(irc->otr->us, kf); 1797 g_free(kf); 1798 g_free(tmp); 1799 } else { 1800 otrl_privkey_read(irc->otr->us, filename); 1801 unlink(filename); 1802 } 1779 char *kf = g_strdup_printf("%s%s.otr_keys", global.conf->configdir, irc->user->nick); 1780 char *tmp = g_strdup_printf("%s.new", kf); 1781 copyfile(filename, tmp); 1782 unlink(filename); 1783 rename(tmp,kf); 1784 otrl_privkey_read(irc->otr->us, kf); 1785 g_free(kf); 1786 g_free(tmp); 1803 1787 } 1804 1788 … … 1875 1859 } 1876 1860 1877 /* check whether a string is safe to use in a path component */1878 int strsane(const char *s)1879 {1880 return strpbrk(s, "/\\") == NULL;1881 }1882 1883 1861 /* vim: set noet ts=4 sw=4: */
Note: See TracChangeset
for help on using the changeset viewer.