dont entrust sprintf to encode binary packets
authorLove Hornquist Astrand <lha@h5l.org>
Mon, 12 Dec 2011 02:08:05 +0000 (18:08 -0800)
committerLove Hornquist Astrand <lha@h5l.org>
Mon, 12 Dec 2011 02:08:05 +0000 (18:08 -0800)
kpasswd/kpasswdd.c

index a9a41f6bfe379305b94d6865cf013a08951dd177..8432229bb030dd3085302e3b01b56f501f4e1074 100644 (file)
@@ -123,21 +123,26 @@ make_result (krb5_data *data,
             uint16_t result_code,
             const char *expl)
 {
-    char *str;
-    krb5_data_zero (data);
-
-    data->length = asprintf (&str,
-                            "%c%c%s",
-                            (result_code >> 8) & 0xFF,
-                            result_code & 0xFF,
-                            expl);
+    krb5_error_code ret;
+    krb5_storage *sp;
+
+    sp = krb5_storage_emem();
+    if (sp == NULL) goto out;
+    ret = krb5_store_uint32(sp, result_code);
+    if (ret) goto out;
+    ret = krb5_store_stringz(sp, expl);
+    if (ret) goto out;
+    ret = krb5_storage_to_data(sp, data);
+    if (ret) goto out;
+    krb5_storage_free(sp);
 
-    if (str == NULL) {
-       krb5_warnx (context, "Out of memory generating error reply");
-       return 1;
-    }
-    data->data = str;
     return 0;
+ out:
+    if (sp)
+       krb5_storage_free(sp);
+
+    krb5_warnx (context, "Out of memory generating error reply");
+    return 1;
 }
 
 static void