summaryrefslogtreecommitdiffstats
path: root/dbus
Commit message (Collapse)AuthorAgeFilesLines
* 2003-02-06 Anders Carlsson <andersca@codefactory.se>Anders Carlsson2003-02-052-593/+1
| | | | | | | | * dbus/Makefile.am: * dbus/dbus-break-loader.c: * test/Makefile.am: * test/break-loader.c: Move dbus-break-loader to test/ and rename it to break-loader.
* 2003-02-02 Havoc Pennington <hp@pobox.com>Havoc Pennington2003-02-056-2/+243
| | | | | | | | | | * dbus/dbus-keyring.c, dbus/dbus-keyring.h: template files for code to manage cookies in your home directory * dbus/dbus-sysdeps.c (_dbus_generate_random_bytes): new function * dbus/dbus-auth.c (get_state): impose a maximum number of tries to authenticate, then disconnect the client.
* 2003-02-03 Alexander Larsson <alexl@redhat.com>Alexander Larsson2003-02-021-2/+2
| | | | | * dbus/dbus-message.c (dbus_message_append_fields): Correct docs.
* 2003-02-02 Anders Carlsson <set EMAIL_ADDRESS environment variable>Anders Carlsson2003-02-021-1/+2
| | | | | | | | * bus/driver.c: (bus_driver_handle_service_exists): Simplify the code a bit. * dbus/dbus-bus.c: (dbus_bus_service_exists): Fix a silly.
* 2003-02-02 Anders Carlsson <andersca@codefactory.se>Anders Carlsson2003-02-011-0/+2
| | | | * dbus/dbus.h: Add dbus-address.h and dbus-bus.h
* 2003-02-02 Anders Carlsson <andersca@codefactory.se>Anders Carlsson2003-02-012-0/+4
| | | | | | * dbus/dbus-server.c: (dbus_server_listen): * dbus/dbus-transport.c: (_dbus_transport_open): ifdef out the calls to the debug transport and server.
* 2003-02-02 Alexander Larsson <alexl@redhat.com>Alexander Larsson2003-02-012-1/+6
| | | | | | | | | | | | | * dbus/dbus-watch.c (dbus_watch_get_flags): Add note in the docs that ERROR or HANGUP won't be returned and are assumed always on. * glib/dbus-gmain.c (add_watch): Always add IO_ERR | IO_HUP * dbus/dbus-message.h: Add semicolon after dbus_message_iter_get_string_array(). Makes qt code build again
* 2003-02-01 Anders Carlsson <andersca@codefactory.se>Anders Carlsson2003-02-014-2/+239
| | | | | | | | | | | | | | | | | | * bus/driver.c: (create_unique_client_name), (bus_driver_handle_hello): Don't take a name, just use a numeric id to identify each client. * dbus/Makefile.am: * dbus/dbus-bus.c: (dbus_bus_register_client), (dbus_bus_acquire_service), (dbus_bus_service_exists): * dbus/dbus-bus.h: Add new convenience functions for communicating with the bus. * dbus/dbus-message.h: * dbus/dbus-protocol.h: Fix a typo.
* 2003-02-01 Alexander Larsson <alexl@redhat.com>Alexander Larsson2003-02-011-2/+4
| | | | | * dbus/dbus-message.c (dbus_message_append_fields): Add some more doc comments.
* 2003-02-01 Havoc Pennington <hp@pobox.com>Havoc Pennington2003-02-012-3/+56
| | | | | | | | * dbus/dbus-break-loader.c (randomly_modify_length): change a 4-byte value in the message as if it were a length * dbus/dbus-sysdeps.c (_dbus_string_save_to_file): don't set execute bit on saved files
* 2003-02-01 Havoc Pennington <hp@pobox.com>Havoc Pennington2003-02-019-106/+890
| | | | | | | | | | * dbus/dbus-break-loader.c (main): new program to find messages that break the loader. * dbus/dbus-sysdeps.c (_dbus_string_append_uint): new function * dbus/dbus-sysdeps.c (_dbus_string_save_to_file): new function * dbus/dbus-string.c (_dbus_string_set_byte): new
* 2003-01-31 Havoc Pennington <hp@pobox.com>Havoc Pennington2003-02-014-76/+155
| | | | | | * dbus/dbus-message.c: refactor the test code to be more general, in preparation for writing a "randomly permute test cases to try to break the loader" program.
* 2003-01-31 Havoc Pennington <hp@pobox.com>Havoc Pennington2003-02-013-10/+11
| | | | | | | | | | | | | | | * doc/dbus-specification.sgml: work on the specification * dbus/dbus-message.c (_dbus_message_loader_return_buffer): check the protocol version of the message. * dbus/dbus-protocol.h: drop special _REPLY names, the spec no longer specifies that. (DBUS_SERVICE_REPLY_SERVICE_EXISTS): fix flags (1/2/4/8 not 1/2/3/4) * dbus/dbus-marshal.c (_dbus_marshal_get_arg_end_pos): add missing "break" for DBUS_TYPE_NIL, remove @todo
* 2003-01-31 Havoc Pennington <hp@pobox.com>Havoc Pennington2003-01-313-11/+24
| | | | | | * dbus/dbus-message.c (dbus_message_set_is_error_reply): rename just set_is_error/get_is_error as this is a commonly-used function, and write docs.
* 2003-01-31 Anders Carlsson <andersca@codefactory.se>Anders Carlsson2003-01-316-11/+60
| | | | | | | | | | | | | | | | | | | | | | | | | | * dbus/dbus-address.c: (dbus_address_entry_free): Free key and value lists. * dbus/dbus-internals.c: (_dbus_type_to_string): Add the types we didn't have. * dbus/dbus-marshal.c: (_dbus_marshal_get_arg_end_pos), (_dbus_marshal_validate_arg): Add NIL types. * dbus/dbus-message.c: (dbus_message_set_sender): Remove todo about being able to set sender to NULL. (dbus_message_set_is_error_reply), (dbus_message_get_is_error_reply): * dbus/dbus-message.h: New functions. * dbus/dbus-protocol.h: Add error reply flag. * test/data/valid-messages/opposite-endian.message: Add NIL type to test.
* 2003-01-31 Havoc Pennington <hp@pobox.com>Havoc Pennington2003-01-313-20/+79
| | | | | | | | | | | | | | * doc/dbus-specification.sgml: fully specify the header. Add flags and major protocol version, and change header/body len to unsigned. * dbus/dbus-message-builder.c (append_saved_length): append length as uint32 * dbus/dbus-message.c (dbus_message_create_header): change header length and body length to unsigned. Add the new fields from the spec (_dbus_message_loader_return_buffer): unsigned header/body len
* 2003-01-30 Havoc Pennington <hp@pobox.com>Havoc Pennington2003-01-311-37/+18
| | | | | | | | * dbus/dbus-auth.c: rework to use only REJECTED, no MECHANISMS * doc/dbus-sasl-profile.txt: drop MECHANISMS and just use REJECTED, suggested by Mark McLoughlin
* 2003-01-30 Havoc Pennington <hp@pobox.com>Havoc Pennington2003-01-313-3/+15
| | | | | | | | | | | | * dbus/dbus-server.c (dbus_server_listen): @todo about how we need a better way to report errors here. e.g. "unix address lacks path" or something. also "no such file" when the path doesn't exist, etc. * dbus/dbus-address.c (dbus_address_entries_free): add @todo about leaking list nodes (dbus_parse_address): add @todo about documenting address format, and allowing , and ; to be escaped
* Fix sillyAnders Carlsson2003-01-301-0/+1
|
* 2003-01-30 Anders Carlsson <andersca@codefactory.se>Anders Carlsson2003-01-3013-25/+740
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * dbus/Makefile.am: Add dbus-address.[ch] * dbus/dbus-address.c: (dbus_address_entry_free), (dbus_address_entries_free), (create_entry), (dbus_address_entry_get_method), (dbus_address_entry_get_value), (dbus_parse_address), (_dbus_address_test): * dbus/dbus-address.h: New files for dealing with address parsing. * dbus/dbus-connection.c: Document timeout functions. * dbus/dbus-message.c: Document dbus_message_new_from_message. * dbus/dbus-server-debug.c: Document. * dbus/dbus-server.c: (dbus_server_listen): Parse address and use correct server implementation. * dbus/dbus-string.c: (_dbus_string_find_to), (_dbus_string_test): * dbus/dbus-string.h: New function with test. * dbus/dbus-test.c: (dbus_internal_symbol_do_not_use_run_tests): * dbus/dbus-test.h: Add address tests. * dbus/dbus-transport-debug.c: Document. * dbus/dbus-transport.c: (_dbus_transport_open): Parse address and use correct transport implementation.
* 2003-01-30 Havoc Pennington <hp@pobox.com>Havoc Pennington2003-01-305-143/+587
| | | | | | | | | | | | | | | | | | | | | | | | * dbus/dbus-message.c: use message->byte_order instead of DBUS_COMPILER_BYTE_ORDER throughout. (dbus_message_create_header): pad header to align the start of the body of the message to 8-byte boundary * dbus/dbus-marshal.h: make all the demarshalers take const DBusString arguments. * dbus/dbus-message.c (_dbus_message_loader_return_buffer): validate message args here, so we don't have to do slow validation later, and so we catch bad messages as they are incoming. Also add better checks on header_len and body_len. Also fill in message->byte_order * dbus/dbus-string.c (_dbus_string_validate_utf8): new (not implemented properly) (_dbus_string_validate_nul): new function to check all-nul * dbus/dbus-marshal.c (_dbus_marshal_get_field_end_pos): rename get_arg_end_pos and remove all validation (_dbus_marshal_validate_arg): actually do validation here.
* 2003-01-29 Havoc Pennington <hp@pobox.com>Havoc Pennington2003-01-301-1/+4
| | | | | * dbus/dbus-message.c (check_message_handling): fix assertion failure on set_client_serial
* 2003-01-28 Havoc Pennington <hp@pobox.com>Havoc Pennington2003-01-292-2/+29
| | | | | | * dbus/dbus-server-debug.c: Add doc section comments * dbus/dbus-transport-debug.c: add doc section comments
* 2003-01-28 Havoc Pennington <hp@redhat.com>Havoc Pennington2003-01-281-14/+13
| | | | | | | * dbus/dbus-string.c (_dbus_string_base64_decode): append bytes in the reverse order from how I had it (_dbus_string_base64_encode): reverse encoding order. I was basically byteswapping everything during encoding.
* And these.Anders Carlsson2003-01-282-5/+5
|
* Forgot this.Anders Carlsson2003-01-281-4/+5
|
* 2003-01-28 Anders Carlsson <set EMAIL_ADDRESS environment variable>Anders Carlsson2003-01-2812-15/+786
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * dbus/dbus-connection-internal.h: * dbus/dbus-connection.c: (_dbus_connection_add_timeout), (_dbus_connection_remove_timeout): Add functions for adding and removing timeouts. * dbus/dbus-message.c: (dbus_message_new_from_message): Add new function that takes a message and creates an exact copy of it, but with the refcount set to 1. (check_message_handling): Fix build error. * dbus/dbus-server-protected.h: * dbus/dbus-server.c: (_dbus_server_init_base), (_dbus_server_finalize_base), (_dbus_server_add_timeout), (dbus_server_set_timeout_functions): (_dbus_server_remove_timeout): New functions so that a server can add and remove timeouts. (dbus_server_listen): Add commented out call to dbus_server_debug_new. * dbus/dbus-timeout.c: (_dbus_timeout_new): Actually set the handler, doh. * dbus/dbus-transport.c: (_dbus_transport_open): Add commented out call to dbus_transport_debug_client_new. * dbus/Makefile.am: Add dbus-transport-debug.[ch] and dbus-server-debug.[ch]
* 2003-01-28 Havoc Pennington <hp@pobox.com>Havoc Pennington2003-01-281-1/+71
| | | | | * dbus/dbus-message.c (check_message_handling): function to check on the loaded message, iterates over it etc.
* 2003-01-28 Havoc Pennington <hp@pobox.com>Havoc Pennington2003-01-281-1/+1
| | | | | | * test/Makefile.am (dist-hook): fix make distdir * dbus/Makefile.am (TESTS_ENVIRONMENT): fix make check
* 2003-01-27 Havoc Pennington <hp@pobox.com>Havoc Pennington2003-01-2812-51/+696
| | | | | | | | | | | | | | | | | | | | | | | | | | * dbus/dbus-mempool.c (time_for_size): replace printf with _dbus_verbose * dbus/dbus-message-builder.c (_dbus_message_data_load): allow empty lines; fix the SAVE_LENGTH stuff to be START_LENGTH/END_LENGTH so it actually works; couple other bugfixes * test/Makefile.am (dist-hook): add dist-hook for .message files * dbus/dbus-string.c (DBUS_STRING_COPY_PREAMBLE): source of a copy can be constant or locked. (_dbus_string_free): allow freeing a const string as documented/intended * dbus/dbus-sysdeps.c (_dbus_concat_dir_and_file): utility * dbus/dbus-test-main.c (main): take an argument which is the directory containing test data * dbus/dbus-message.c (_dbus_message_test): pass a test_data_dir argument to this and load all the messages in test/data/ checking that they can be loaded or not loaded as appropriate.
* 2003-01-27 Anders Carlsson <andersca@codefactory.se>Anders Carlsson2003-01-273-10/+52
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * bus/dispatch.c: (bus_dispatch_message_handler): Dispatch messages sent to services. * bus/driver.c: (bus_driver_send_service_deleted), (bus_driver_send_service_created), (bus_driver_send_service_lost), (bus_driver_send_service_acquired): Add helper functions for sending service related messages. (bus_driver_send_welcome_message): Send HELLO_REPLY instead of WELCOME. (bus_driver_handle_list_services): Send LIST_SERVICES_REPLY instead of SERVICES. (bus_driver_handle_own_service), (bus_driver_handle_service_exists): New message handlers. (bus_driver_handle_message): Invoke new message handlers. (bus_driver_remove_connection): Don't remove any services here since that's done automatically by bus_service_remove_owner now. * bus/driver.h: New function signatures. * bus/services.c: (bus_service_add_owner): Send ServiceAcquired message if we're the only primary owner. (bus_service_remove_owner): Send ServiceAcquired/ServiceLost messages. (bus_service_set_prohibit_replacement), (bus_service_get_prohibit_replacement): Functions for setting prohibit replacement. (bus_service_has_owner): New function that checks if a connection is in the owner queue of a certain service. * bus/services.h: Add new function signatures. * dbus/dbus-list.c: (_dbus_list_test): Add tests for _dbus_list_remove_last and traversing the list backwards. * dbus/dbus-list.h: Fix a typo in _dbus_list_get_prev_link, if we're at the first element we can't go any further, so return NULL then. * dbus/dbus-protocol.h: Add new messages, service flags and service replies.
* 2003-01-26 Havoc Pennington <hp@pobox.com>Havoc Pennington2003-01-265-3/+753
| | | | | | | | | | * dbus/dbus-message-builder.c: implement, completely untested. * test/data/*: add data to be used in testing. ".message" files are our simple loadable text format. ".message-raw" will be binary dumps of messages. * dbus/dbus-string.c (_dbus_string_starts_with_c_str): new
* add a couple @todoHavoc Pennington2003-01-261-0/+11
|
* 2003-01-26 Havoc Pennington <hp@pobox.com>Havoc Pennington2003-01-268-2/+229
| | | | | | | | | | * dbus/dbus-sysdeps.c (_dbus_file_get_contents): new function * dbus/dbus-errors.c (dbus_result_to_string): add file errors * dbus/dbus-message-builder.c: new file, will contain code to load up messages from files. Not implemented yet.
* 2003-01-26 Havoc Pennington <hp@pobox.com>Havoc Pennington2003-01-261-5/+72
| | | | | * dbus/dbus-message.c (dbus_message_set_sender): support deleting the sender by setting to NULL
* 2003-01-26 Havoc Pennington <hp@pobox.com>Havoc Pennington2003-01-269-181/+758
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The unit tests pass, but otherwise untested. If it breaks, the tests should have been better. ;-) * bus/driver.c (bus_driver_handle_hello): return if we disconnect the connection. * dbus/dbus-message.c: redo everything so we maintain message->header as the only copy of the various fields. This avoids the possibility of out-of-memory in some cases, for example dbus_message_lock() can't run out of memory anymore, and avoids extra copying. Figured I may as well go ahead and do this since it was busted for dbus_message_lock to not return failure on OOM, and dbus_message_write_header was totally unchecked for OOM. Also fixed some random other bugs. * dbus/dbus-marshal.c (_dbus_marshal_get_field_end_pos): verify that strings are nul-terminated. Also, end_pos can be equal to string length just not greater than, I think. (_dbus_marshal_set_int32): new function (_dbus_marshal_set_uint32): new function (_dbus_marshal_set_string): new function * dbus/dbus-connection.c (_dbus_connection_new_for_transport): fix a warning, init timeout_list to NULL (dbus_connection_send_message): don't use uninitialized variable "serial" * dbus/dbus-string.c (_dbus_string_replace_len): new function
* 2003-01-26 Anders Carlsson <andersca@codefactory.se>Anders Carlsson2003-01-264-14/+22
| | | | | | | | | | | | | | | | | | * dbus/dbus-auth.c: (process_auth), (_dbus_auth_unref): * dbus/dbus-connection.c: (_dbus_connection_new_for_transport), (dbus_connection_unref): * dbus/dbus-marshal.c: (_dbus_marshal_test): * dbus/dbus-message.c: (dbus_message_unref), Plug memory leaks. (dbus_message_get_fields): Remove debugging printout. (_dbus_message_loader_return_buffer): Don't store the header string. (_dbus_message_test): Plug leaks.
* 2003-01-25 Anders Carlsson <andersca@codefactory.se>Anders Carlsson2003-01-254-1/+21
| | | | | | | | | | | | * dbus/dbus-internals.h: Add _DBUS_HANDLE_OOM macro, it doesn't do anything currently. * dbus/dbus-message.c: (dbus_message_get_sender): * dbus/dbus-message.h: Implement dbus_message_get_sender. * dbus/dbus-protocol.h: Add message and service defines.
* 2003-01-25 Anders Carlsson <andersca@codefactory.se>Anders Carlsson2003-01-253-24/+19
| | | | | | | | | * dbus/dbus-connection.c: (dbus_connection_send_message): * dbus/dbus-message-internal.h: * dbus/dbus-message.c: (_dbus_message_get_client_serial), (dbus_message_write_header): Remove _dbus_messag_unlock and don't set the client serial on a message if one already exists.
* 2003-01-24 Havoc Pennington <hp@pobox.com>Havoc Pennington2003-01-251-1/+21
| | | | | | | | * dbus/dbus-list.c (alloc_link): put a thread lock on the global list_pool * bus/driver.c (bus_driver_handle_list_services): fix a leak on OOM
* 2003-01-25 Anders Carlsson <andersca@codefactory.se>Anders Carlsson2003-01-251-4/+8
| | | | | * dbus/dbus-list.c: (alloc_link), (free_link): Use a memory pool for the links.
* 2003-01-25 Anders Carlsson <andersca@codefactory.se>Anders Carlsson2003-01-245-49/+158
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * dbus/dbus-connection.c: (dbus_connection_send_message): Unlock the message in case it was sent earlier. (dbus_connection_send_message_with_reply_and_block): Remove the reply message from the list. * dbus/dbus-marshal.c: (_dbus_demarshal_string_array): Set array_len and new_pos correctly. (_dbus_marshal_test): Remove debug output. * dbus/dbus-message-internal.h: * dbus/dbus-message.c: (_dbus_message_get_reply_serial): New function that returns the reply serial. (_dbus_message_unlock): New function that unlocks a message and resets its header. (dbus_message_append_string_array), (dbus_message_get_fields_valist), (dbus_message_iter_get_field_type), (dbus_message_iter_get_string_array), (dbus_message_get_fields), (dbus_message_append_fields_valist): Handle string arrays. (dbus_message_set_sender): Make this function public since the bus daemon needs it. (decode_header_data): Set the reply serial to -1 initially. * dbus/dbus-message.h: Add dbus_message_set_sender.
* 2003-01-22 Havoc Pennington <hp@pobox.com>Havoc Pennington2003-01-221-0/+13
| | | | | | | * dbus/dbus-connection.c (dbus_connection_send_message_with_reply_and_block): add some @todo * bus/driver.c (bus_driver_add_connection): add a FIXME about memleak
* 2003-01-21 Havoc Pennington <hp@pobox.com>Havoc Pennington2003-01-222-0/+23
| | | | | | | | | | (patch untested because can't compile) * bus/driver.c (create_unique_client_name): make this function never recycle client names. Also, caller should initialize the DBusString. * dbus/dbus-sysdeps.c (_dbus_get_current_time): new function
* 2003-01-21 Anders Carlsson <andersca@codefactory.se>Anders Carlsson2003-01-213-45/+450
| | | | | | | | | | | | | | * dbus/dbus-marshal.c: (_dbus_marshal_double), (_dbus_marshal_int32), (_dbus_marshal_uint32), (_dbus_marshal_int32_array), (_dbus_marshal_uint32_array), (_dbus_marshal_double_array), (_dbus_marshal_string_array), (_dbus_demarshal_int32_array), (_dbus_demarshal_uint32_array), (_dbus_demarshal_double_array), (_dbus_demarshal_string_array), (_dbus_marshal_get_field_end_pos), (_dbus_marshal_test): * dbus/dbus-marshal.h: * dbus/dbus-protocol.h: Add support for marshalling and demarshalling integer, double and string arrays.
* 2003-01-21 Anders Carlsson <andersca@codefactory.se>Anders Carlsson2003-01-218-35/+221
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * dbus/dbus-connection.c: (dbus_connection_send_message): Add a new client_serial parameter. (dbus_connection_send_message_with_reply): Remove a @todo since we've implemented the blocking function. (dbus_connection_send_message_with_reply_and_block): New function that sends a message and waits for a reply and then returns the reply. * dbus/dbus-connection.h: Add new functions. * dbus/dbus-errors.c: (dbus_result_to_string): * dbus/dbus-errors.h: Add new DBUS_RESULT. * dbus/dbus-message-internal.h: * dbus/dbus-message.c: (_dbus_message_get_reply_serial), (_dbus_message_set_sender), (dbus_message_write_header), (dbus_message_new_reply), (decode_header_data), (_dbus_message_loader_return_buffer), (_dbus_message_test): * dbus/dbus-message.h: Add new functions that set the reply serial and sender. Also marshal and demarshal them correctly and add test. * dbus/dbus-protocol.h: Add new DBUS_MESSAGE_TYPE_SENDER. * glib/dbus-glib.h: * glib/dbus-gmain.c: (watch_callback), (free_callback_data), (add_watch), (remove_watch), (add_timeout), (remove_timeout), (dbus_connection_hookup_with_g_main): * glib/test-dbus-glib.c: (main): Rewrite to use GIOChannel and remove the GSource crack. * test/echo-client.c: (main): * test/watch.c: (check_messages): Update for changed APIs
* Add these.Anders Carlsson2003-01-192-0/+402
|
* 2003-01-19 Anders Carlsson <andersca@codefactory.se>Anders Carlsson2003-01-196-19/+92
| | | | | | | | | | | | | | | | | | * dbus/Makefile.am: Add dbus-timeout.[cħ] * dbus/dbus-connection.c: (_dbus_connection_new_for_transport): Create a DBusTimeoutList. (dbus_connection_set_timeout_functions): Add new function to set timeout callbacks * dbus/dbus-connection.h: Add public DBusTimeout API. * dbus/dbus-message.c: (dbus_message_get_service): * dbus/dbus-message.h: New function. * dbus/dbus-server.c: Fix small doc typo. * dbus/dbus-timeout.[ch]: New files for mainloop timeouts.
* 2003-01-19 Anders Carlsson <andersca@codefactory.se>Anders Carlsson2003-01-191-2/+2
| | | | | * dbus/dbus-string.c (_dbus_string_move_len): Don't delete all of the string, just as long as specified.
* 2003-01-19 Havoc Pennington <hp@pobox.com>Havoc Pennington2003-01-197-13/+151
| | | | | | | | | | * dbus/dbus-connection.c (dbus_connection_get_is_authenticated): new function * dbus/dbus-server.c (dbus_server_set_max_connections) (dbus_server_get_max_connections, dbus_server_get_n_connections): keep track of current number of connections, and add API for setting a max (but haven't implemented enforcing the max yet)